ChatGPT解决这个技术问题 Extra ChatGPT

In MVC, how do I return a string result?

In my AJAX call, I want to return a string value back to the calling page.

Should I use ActionResult or just return a string?

check here to return bootstrap alert message

B
Bakudan

You can just use the ContentResult to return a plain string:

public ActionResult Temp() {
    return Content("Hi there!");
}

ContentResult by default returns a text/plain as its contentType. This is overloadable so you can also do:

return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");

What is the contentType if your return type is a string?
I don't know how accurate this answer was back then, but currently ContentResult does if (!String.IsNullOrEmpty(ContentType)) before setting HttpContext.Response.ContentType. I'm seeing text/html with your first example, either that's the default now or it's an educated guess by the HttpContext.
How can I Access in View ?
Small addition: instead of literally adding "text/plain" as a string, you could use a .NET framework constant like MediaTypeNames.Text.Plain or MediaTypeNames.Text.Xml. Although it only includes some of the most-used MIME types. ( docs.microsoft.com/en-us/dotnet/api/… )
Up voted, though I did need to specify the mime type as "text/plain" when returning HTML as text per @Stijn comment.
H
Haacked

You can also just return string if you know that's the only thing the method will ever return. For example:

public string MyActionName() {
  return "Hi there!";
}

Phil, is this a "Best Practice", could you please explain the difference between the your answer and @swilliam 's
You can't return a string from a method which returns an ActionResult, so in this case you return Content("") as swilliams explained. If you only ever need to return a string, then you would have the method return a string, as Phil explained.
Assuming that same action has multiple return statements which are used to send either string or JSON or View based on conditions then we must use Content to return string.
M
Madhav Singh Raghav
public ActionResult GetAjaxValue()
{
   return Content("string value");
}

better to explain more during answer
J
Jack Miller

As of 2020, using ContentResult is still the right approach as proposed above, but the usage is as follows:

return new System.Web.Mvc.ContentResult
{
    Content = "Hi there! ☺",
    ContentType = "text/plain; charset=utf-8"
}

B
Benj Sanders

There Are 2 ways to return a string from the controller to the view:

First

You could return only the string, but it will not be included in your .cshtml file. it will be just a string appearing in your browser.

Second

You could return a string as the Model object of View Result.

Here is the code sample to do this:

public class HomeController : Controller
{
    // GET: Home
    // this will return just a string, not html
    public string index()
    {
        return "URL to show";
    }

    public ViewResult AutoProperty()
    {   
        string s = "this is a string ";
        // name of view , object you will pass
        return View("Result", s);

    }
}

In the view file to run AutoProperty, It will redirect you to the Result view and will send s code to the view

<!--this will make this file accept string as it's model-->
@model string

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Result</title>
</head>
<body>
    <!--this will represent the string -->
    @Model
</body>
</html>

I run this at http://localhost:60227/Home/AutoProperty.


N
Naktibalda
public JsonResult GetAjaxValue() 
{
  return Json("string value", JsonRequetBehaviour.Allowget); 
}

W
Walter Verhoeven

you can just return a string but some API's do not like it as the response type is not fitting the response,

[Produces("text/plain")]
public string Temp() {
    return Content("Hi there!");
}

this usually does the trick