asp.net mvc3 возвращает необработанный HTML для просмотра - PullRequest
70 голосов
/ 07 октября 2011

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

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

@{
    ViewBag.Title = "Index";
}

@Html.Raw(ViewBag.HtmlOutput)

Ответы [ 5 ]

135 голосов
/ 07 октября 2011

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

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

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

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

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

8 голосов
/ 07 октября 2011

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

5 голосов
/ 19 мая 2015

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

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 на страницу просмотра

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

1 голос
/ 07 октября 2011

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

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

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

@Html.Raw(Model)
0 голосов
/ 13 мая 2016

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

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

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

<div>
        @ViewBag.EncodedHtml
</div>
...