asp.net mvc3返回原始html查看


76

还有其他方法可以从控制器返回原始html吗?与仅使用Viewbag相反。如下所示:

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

@{
    ViewBag.Title = "Index";
}

@Html.Raw(ViewBag.HtmlOutput)

我承认有很多直接注入html的原因,但我很好奇为什么您会遇到这种情况?
Rikon

3
我有一些从dll生成标记的旧代码。

Answers:


150

这样做没有什么意义,因为View应该生成html,而不是控制器。但是无论如何,您都可以使用Controller.Content方法,该方法使您能够指定结果html,内容类型和编码

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

或者,您可以使用asp.net-mvc框架中内置的技巧-使操作直接返回字符串。它将字符串内容传递到用户的浏览器中。

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

实际上,对于除以外的任何操作结果ActionResult,框架都会尝试将其序列化为字符串并写入响应。


我同意视图生成html。我的内容认为是从旧版dll生成的。如果控制器不是正确的调用位置,那么也许是模型?

1
使用字符串的返回类型很有趣。这一直有效吗?
马修·尼科尔斯

是。任何非ActionResult的内容都将转换为字符串并返回响应
archil 2014年

有没有办法将其返回为PartialViewResult
Shimmy Weitzhandler,2015年

4
如果要确保将其呈现为html,请添加第二个参数:return Content("<html></html>", "text/html");
Grengas

8

只需在类型为MvcHtmlString的视图模型中创建一个属性。您不需要Html,也可以将其原始。


谢谢。并没有完全使用您所说的话。您所说的内容帮助我弄清楚了[DataType.Html]
Dexter

5

尝试返回引导警报消息,这对我有用

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

注意:不要忘记添加引导cssjs在视图页面

希望可以帮助某人。


谢谢,它确实帮助了我:)
rentire

1

看起来不错,除非您想将其作为Model字符串传递

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

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

@Html.Raw(Model)

0

对我来说(ASP.NET Core)ContentResult有用的是设置返回类型,然后将HMTL包装到其中,并将ContentType设置为"text/html; charset=UTF-8"。这很重要,因为否则它将不会被解释为HTML,而HTML语言将被显示为文本。

这是Controller类的一部分的示例:

/// <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;
}

-1
public ActionResult Questionnaire()
{
    return Redirect("~/MedicalHistory.html");
}

4
请在您的答案中说明问题所在,以及此代码段将如何解决它,以帮助其他人理解此答案
slideshowp2

-2

在控制器中,您可以使用 MvcHtmlString

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

在您的视图中,您可以简单地使用您在Controller中设置的动态属性,如下所示

<div>
        @ViewBag.EncodedHtml
</div>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.