Як повернути результат рядка в MVC?


630

Під час дзвінка AJAX я хочу повернути значення рядка на сторінку виклику.

Чи варто використовувати ActionResultабо просто повернути рядок?


4
перевірте тут, щоб повернути повідомлення про завантаження завантаження
shaijut

Відповіді:


1074

Ви можете просто скористатися ContentResultдля повернення простої рядки:

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

ContentResultза замовчуванням повертає a text/plainяк його contentType . Це можна завантажити, тому ви також можете зробити:

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

Що таке contentType, якщо ваш тип повернення - це рядок?
користувач1886419

7
Я не знаю, наскільки точна ця відповідь була тоді, але наразі ContentResultце робиться if (!String.IsNullOrEmpty(ContentType))до встановлення HttpContext.Response.ContentType. Я бачу text/htmlз вашим першим прикладом, або це за замовчуванням зараз, або це освічена здогадка HttpContext.
user247702

Як я можу отримати доступ до перегляду?
Pradeep Kumar Das

4
Невелике доповнення: замість того, щоб буквально додавати "текст / звичайний" як рядок, ви можете використовувати константу .NET Framework, як MediaTypeNames.Text.Plainабо MediaTypeNames.Text.Xml. Хоча вона включає лише деякі з найбільш використовуваних типів MIME. ( docs.microsoft.com/en-us/dotnet/api/… )
Doku-so

Вгору проголосували, хоча мені потрібно було вказати тип mime як "текст / звичайний" при поверненні HTML як текст за коментарем @Stijn.
Роберто

113

Ви також можете просто повернути рядок, якщо знаєте, що це єдине, що метод коли-небудь поверне. Наприклад:

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

10
Філ, це "найкраща практика", чи не могли б ви пояснити різницю між вашою відповіддю та @swilliam's
Девідом Перлманом

9
Ви не можете повернути рядок із методу, який повертає ActionResult, тому в цьому випадку ви повертаєте Зміст (""), як пояснено swilliams. Якщо вам потрібно коли-небудь повернути рядок, тоді у вас буде метод повернути рядок, як пояснив Філ.
Arkiliknam

3
Якщо припустити , що таке ж дію має кілька returnзаяв , які використовуються для відправки або stringабо JSONабо на Viewпідставі умов , то ми повинні використовувати , Contentщоб повернути рядок.
DhruvJoshi



0

Станом на 2020 рік, використання ContentResultвсе ще є правильним підходом, як було запропоновано вище , але використання полягає в наступному:

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

-1

є 2 способи повернути рядок від контролера до перегляду

спочатку

Ви можете повернути лише рядок, але вона не буде включена до html-файлу, вона з'явиться в браузері


другий

може повернути рядок як об'єкт результату перегляду

ось зразки коду для цього

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 він перенаправить вас на перегляд Result і надішле код s
для перегляду

<!--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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.