asp.net mvc3 возвращает необработанный html для просмотра

Есть ли другие способы вернуть необработанный HTML-код с контроллера? В отличие от простого использования viewbag. как показано ниже:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.HtmlOutput = "<HTML></HTML>";
        return View();
    }
}

@{
    ViewBag.Title = "Index";
}

@Html.Raw(ViewBag.HtmlOutput)

person River    schedule 07.10.2011    source источник
comment
Я признаю, что есть много причин для прямого внедрения html, но мне было любопытно, почему вы были в этом случае?   -  person Rikon    schedule 07.10.2011
comment
У меня есть устаревший код, который генерирует разметку из dll.   -  person River    schedule 07.10.2011


Ответы (7)


В этом нет особого смысла, потому что View должен генерировать html, а не контроллер. Но в любом случае вы можете использовать метод Controller.Content, что дает вам возможность указать результат html, а также тип содержимого и кодировку

public ActionResult Index()
{
    return Content("<html></html>");
}

Или вы можете использовать трюк, встроенный в фреймворк asp.net-mvc, - заставить строку действия возвращать напрямую. Он доставит строковое содержимое в браузер пользователя.

public string Index()
{
    return "<html></html>";
}

Фактически, для любого результата действия, отличного от ActionResult, framework пытается сериализовать его в строку и записать в ответ.

person archil    schedule 07.10.2011
comment
Я согласен с созданием представления html. моя мысль о содержании генерируется из устаревшей dll. Если контроллер не то место для вызова, то, может быть, модель? - person River; 07.10.2011
comment
Это интересно об использовании возвращаемого типа строки. Это всегда работало? - person Matthew Nichols; 19.02.2014
comment
да. Все, что не является ActionResult, преобразуется в строку и возвращается ответ - person archil; 19.02.2014
comment
Есть ли способ вернуть его как PartialViewResult? - person Shimmy Weitzhandler; 30.03.2015
comment
Если вы хотите, чтобы он отображался как html, добавьте второй параметр: return Content("<html></html>", "text/html"); - person Grengas; 09.08.2019

Просто создайте свойство в своей модели представления типа MvcHtmlString. Тогда вам также не понадобится Html.Raw.

person Adam Tuliper - MSFT    schedule 07.10.2011
comment
Спасибо. Не совсем то, что вы сказали. То, что вы сказали, помогло мне разобраться с использованием [DataType.Html] - person Dexter; 07.10.2014

Попробуйте вернуть сообщение с предупреждением о начальной загрузке, у меня это сработало

return Content("<div class='alert alert-success'><a class='close' data-dismiss='alert'>
&times;</a><strong style='width:12px'>Thanks!</strong> updated successfully</div>");

Примечание. Не забудьте добавить начальную загрузку css и js на свою страницу просмотра.

надежда кому-то помогает.

person Shaiju T    schedule 19.05.2015
comment
Спасибо, мне очень помогло :) - person rentire; 04.08.2015

Что сработало для меня (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 result;
}
person Matt    schedule 30.07.2020

Это выглядит нормально, если вы не хотите передать его как строку модели

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string model = "<HTML></HTML>";
        return View(model);
    }
}

@model string
@{
    ViewBag.Title = "Index";
}

@Html.Raw(Model)
person MoXplod    schedule 07.10.2011

В контроллере вы можете использовать MvcHtmlString

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string rawHtml = "<HTML></HTML>";
        ViewBag.EncodedHtml = MvcHtmlString.Create(rawHtml);
        return View();
    }
}

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

<div>
        @ViewBag.EncodedHtml
</div>
person waris kantroo    schedule 13.05.2016

person    schedule
comment
Опишите в своем ответе, в чем была проблема, и как этот фрагмент поможет ее решить, чтобы помочь другим понять этот ответ. - person slideshowp2; 06.11.2019