В MVC, как мне вернуть строковый результат?

630

В моем вызове AJAX я хочу вернуть строковое значение обратно на страницу вызова.

Должен ли я использовать ActionResultили просто вернуть строку?

user67033
источник
4
отметьте здесь, чтобы вернуть сообщение о начальной загрузке
shaijut

Ответы:

1075

Вы можете просто использовать ContentResultдля возврата простой строки:

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

ContentResultпо умолчанию возвращает a в text/plainкачестве своего contentType . Это перегружается, поэтому вы также можете сделать:

return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
swilliams
источник
Что такое contentType, если ваш тип возвращаемого значения - строка?
user1886419
7
Я не знаю, насколько точным был этот ответ в то время, но в настоящее время это ContentResultделается if (!String.IsNullOrEmpty(ContentType))до установки HttpContext.Response.ContentType. Я вижу text/htmlна вашем первом примере, либо это по умолчанию сейчас, либо это обоснованное предположение HttpContext.
user247702
Как я могу получить доступ в представлении?
Прадип Кумар Дас
4
Небольшое дополнение: вместо буквального добавления «text / plain» в виде строки, вы можете использовать константу .NET Framework, например MediaTypeNames.Text.Plainили MediaTypeNames.Text.Xml. Хотя он включает только некоторые из наиболее часто используемых типов MIME. ( docs.microsoft.com/en-us/dotnet/api/… )
Доку-со
За проголосовал, хотя мне нужно было указать тип mime как «text / plain» при возврате HTML как текста в комментарии @Stijn.
Роберто
113

Вы также можете просто вернуть строку, если знаете, что это единственное, что метод когда-либо вернет. Например:

public string MyActionName() {
  return "Hi there!";
}
Haacked
источник
10
Фил, это «Лучшая практика», не могли бы вы объяснить разницу между вашим ответом и @swilliam's
Дэвид Перлман
9
Вы не можете вернуть строку из метода, который возвращает ActionResult, поэтому в этом случае вы возвращаете Content (""), как объяснено в swilliams. Если вам когда-нибудь понадобится вернуть строку, то у вас будет метод, возвращающий строку, как объяснил Фил.
Аркиликнам
3
Если предположить , что такое же действие имеет несколько returnзаявлений , которые используются для отправки либо stringили JSONили на Viewосновании условий , то мы должны использовать , Contentчтобы вернуть строку.
ДхрувДзоши
11
public ActionResult GetAjaxValue()
{
   return Content("string value");
}
Мадхав Сингх Рагхав
источник
9
лучше объяснить больше во время ответа
Мостафиз
0
public JsonResult GetAjaxValue() 
{
  return Json("string value", JsonRequetBehaviour.Allowget); 
}
Кекуле
источник
0

Начиная с 2020 года, использование ContentResultвсе еще является правильным подходом, как предложено выше , но использование выглядит следующим образом:

return new System.Web.Mvc.ContentResult
{
    Content = "Hi there! ☺",
    ContentType = "text/plain; charset=utf-8"
}
Джек миллер
источник
-1

есть 2 способа вернуть строку из контроллера в представление

первый

вы можете вернуть только строку, но она не будет включена в html файл, так как в браузере появится строка jus


второй

может вернуть строку как объект View Result

вот примеры кода для этого

public class HomeController : Controller
{
    // GET: Home
    // this will mreturn just 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", (object)s);

    }
}

в файл представления для запуска AutoProperty он будет перенаправлять вас Результат вид и будет посылать ей
код для зрения

<!--this to make this file accept string as model-->
@model string

@{
    Layout = null;
}

<!DOCTYPE html>

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

я запускаю его по адресу http: // localhost: 60227 / Home / AutoProperty

Ахмед Хаттаб
источник