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?
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");
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!";
}
return
statements which are used to send either string
or JSON
or View
based on conditions then we must use Content
to return string.
public ActionResult GetAjaxValue()
{
return Content("string value");
}
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"
}
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.
public JsonResult GetAjaxValue()
{
return Json("string value", JsonRequetBehaviour.Allowget);
}
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
Success story sharing
ContentResult
doesif (!String.IsNullOrEmpty(ContentType))
before settingHttpContext.Response.ContentType
. I'm seeingtext/html
with your first example, either that's the default now or it's an educated guess by theHttpContext
.MediaTypeNames.Text.Plain
orMediaTypeNames.Text.Xml
. Although it only includes some of the most-used MIME types. ( docs.microsoft.com/en-us/dotnet/api/… )