asp.net mvc3: Как вернуть необработанный html для просмотра?

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