#asp.net-mvc-3 #controller #return
#asp.net-mvc-3 #контроллер #Возврат
Вопрос:
Есть ли другие способы вернуть необработанный html с контроллера? В отличие от простого использования viewbag. как показано ниже:
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.HtmlOutput = "<HTML></HTML>";
return View();
}
}
@{
ViewBag.Title = "Index";
}
@Html.Raw(ViewBag.HtmlOutput)
Комментарии:
1. Я признаю, что есть много причин вводить html напрямую, но мне было любопытно, почему вы были в этом случае?
2. У меня есть некоторый устаревший код, который генерирует разметку из dll.
Ответ №1:
В этом нет особого смысла, потому View
что должен генерироваться html, а не контроллер. Но в любом случае вы могли бы использовать контроллер.Метод содержимого, который дает вам возможность указывать результирующий html, а также тип содержимого и кодировку
public ActionResult Index()
{
return Content("<html></html>");
}
Или вы могли бы использовать трюк, встроенный в asp.net-mvc framework — заставить действие возвращать строку напрямую. Он будет доставлять строковое содержимое в браузер пользователя.
public string Index()
{
return "<html></html>";
}
Фактически, для любого результата действия, отличного от ActionResult
, framework пытается сериализовать его в строку и записать в ответ.
Комментарии:
1. Я согласен с представлением, генерирующим html. мой контент создается из устаревшей библиотеки dll. Если контроллер не подходит для вызова, тогда, может быть, модель?
2. Это интересно в использовании возвращаемого типа строки. Это всегда работало?
3. ДА. Все, что не является ActionResult, преобразуется в строку и возвращает ответ
4. Есть ли способ вернуть его как
PartialViewResult
?5. Если вы хотите убедиться, что он отображается как html, добавьте второй параметр:
return Content("<html></html>", "text/html");
Ответ №2:
Просто создайте свойство в вашей модели представления типа MvcHtmlString. Вам не понадобится Html.Тогда либо необработайте его.
Комментарии:
1. Спасибо. Не использовал именно то, что вы сказали. То, что вы сказали, помогло мне разобраться с использованием [DataType.Html ]
Ответ №3:
Попробуйте вернуть сообщение с предупреждением о начальной загрузке, это сработало для меня
return Content("<div class='alert alert-success'><a class='close' data-dismiss='alert'>
amp;times;</a><strong style='width:12px'>Thanks!</strong> updated successfully</div>");
Примечание: Не забудьте добавить bootstrap css
и js
на страницу просмотра
надеюсь, кому-то поможет.
Комментарии:
1. Спасибо, это действительно помогло мне 🙂
Ответ №4:
Что у меня работало (ASP.NET Core), состоял в том, чтобы установить возвращаемый тип ContentResult
, затем обернуть в него HMTL и установить ContentType "text/html; charset=UTF-8"
равным . Это важно, потому что в противном случае он не будет интерпретироваться как HTML, а язык HTML будет отображаться в виде текста.
Вот пример, часть класса контроллера:
/// <summary>
/// Startup message displayed in browser.
/// </summary>
/// <returns>HTML result</returns>
[HttpGet]
public ContentResult Get()
{
var result = Content("<html><title>DEMO</title><head><h2>Demo started successfully."
"<br/>Use <b><a href="http://localhost:5000/swagger">Swagger</a></b>"
" to view API.</h2></head><body/></html>");
result.ContentType = "text/html; charset=UTF-8";
return resu<
}
Ответ №5:
Это выглядит нормально, если только вы не хотите передать его как строку модели
public class HomeController : Controller
{
public ActionResult Index()
{
string model = "<HTML></HTML>";
return View(model);
}
}
@model string
@{
ViewBag.Title = "Index";
}
@Html.Raw(Model)
Ответ №6:
public ActionResult Questionnaire()
{
return Redirect("~/MedicalHistory.html");
}
Комментарии:
1. Пожалуйста, опишите в своем ответе, в чем была проблема, и как этот фрагмент решит ее, чтобы помочь другим понять этот ответ
Ответ №7:
В контроллере вы можете использовать MvcHtmlString
public class HomeController : Controller
{
public ActionResult Index()
{
string rawHtml = "<HTML></HTML>";
ViewBag.EncodedHtml = MvcHtmlString.Create(rawHtml);
return View();
}
}
На ваш взгляд, вы можете просто использовать это динамическое свойство, которое вы установили в своем контроллере, как показано ниже
<div>
@ViewBag.EncodedHtml
</div>