在MVC中,如何返回字符串结果?

use*_*033 610 ajax asp.net-mvc actionresult

在我的AJAX调用中,我想将一个字符串值返回给调用页面.

我应该使用ActionResult还是只返回一个字符串?

swi*_*ams 1041

你可以使用它ContentResult来返回一个纯字符串:

public ActionResult Temp() {
    return Content("Hi there!");
}
Run Code Online (Sandbox Code Playgroud)

ContentResult默认情况下,返回a text/plain作为其contentType.这是多重的,所以你也可以这样做:

return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
Run Code Online (Sandbox Code Playgroud)

  • 我不知道这个答案当时有多准确,但是当前`ContentResult`在设置`HttpContext.Response.ContentType`之前做了`if(!String.IsNullOrEmpty(ContentType))`.我用你的第一个例子看到`text/html`,或者现在是默认的,或者是`HttpContext`的有根据的猜测. (7认同)
  • 小小的补充:您可以使用.NET框架常量,例如`MediaTypeNames.Text.Plain`或`MediaTypeNames.Text.Xml`,而不是逐字地添加"text/plain".虽然它只包含一些最常用的MIME类型._(https://docs.microsoft.com/en-us/dotnet/api/system.net.mime.mediatypenames)_ (4认同)

Haa*_*ked 111

如果您知道方法将返回的唯一内容,您也可以返回字符串.例如:

public string MyActionName() {
  return "Hi there!";
}
Run Code Online (Sandbox Code Playgroud)

  • 菲尔,这是一个"最佳实践",请你解释你的答案和@swilliam之间的区别 (10认同)
  • 你不能从返回ActionResult的方法返回一个字符串,所以在这种情况下你返回内容("")作为swilliams解释.如果你只需要返回一个字符串,那么你就可以让方法返回一个字符串,就像菲尔解释的那样. (9认同)
  • 假设同一个动作有多个`return`语句,用于根据条件发送`string`或`JSON`或`View`,那么我们必须使用`Content`来返回字符串. (3认同)

Mad*_*hav 9

public ActionResult GetAjaxValue()
{
   return Content("string value");
}
Run Code Online (Sandbox Code Playgroud)

  • 在回答期间更好地解释更多 (8认同)

Jac*_*ler 6

截至2020年,使用仍然是上面ContentResult提出的正确方法,但用法如下:

\n\n
return new System.Web.Mvc.ContentResult\n{\n    Content = "Hi there! \xe2\x98\xba",\n    ContentType = "text/plain; charset=utf-8"\n}\n
Run Code Online (Sandbox Code Playgroud)\n