In MVC, how do I return a string result?
Asked Answered
S

7

702

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?

Stirling answered 16/2, 2009 at 17:44 Comment(1)
check here to return bootstrap alert messageStanstance
L
1185

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");
Lanalanae answered 16/2, 2009 at 17:47 Comment(5)
What is the contentType if your return type is a string?Depreciable
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.Expiratory
How can I Access in View ?Sheply
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. ( learn.microsoft.com/en-us/dotnet/api/… )Klagenfurt
Up voted, though I did need to specify the mime type as "text/plain" when returning HTML as text per @Stijn comment.Monmouth
A
118

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!";
}
Americana answered 16/2, 2009 at 23:29 Comment(4)
Phil, is this a "Best Practice", could you please explain the difference between the your answer and @swilliam 'sPremise
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.Shrunken
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.Osteal
What is the trick for the compiler to allow return type to be "string" if expecting IActionResult?Nannie
S
21
public ActionResult GetAjaxValue()
{
   return Content("string value");
}
Silkworm answered 27/4, 2016 at 14:18 Comment(1)
better to explain more during answerHeterogeneity
F
6

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"
}
Forwhy answered 4/5, 2020 at 8:20 Comment(0)
B
3

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.

Bimolecular answered 10/6, 2017 at 16:58 Comment(0)
A
0
public JsonResult GetAjaxValue() 
{
  return Json("string value", JsonRequetBehaviour.Allowget); 
}
Apnea answered 16/5, 2017 at 12:45 Comment(0)
Y
0

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

Yare answered 17/1, 2022 at 14:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.