【问题标题】:asp.net mvc3 return raw html to viewasp.net mvc3 返回原始 html 以查看
【发布时间】:2011-12-02 16:19:26
【问题描述】:

还有其他方法可以从控制器返回原始 html 吗?而不是仅仅使用 viewbag。如下:

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

@{
    ViewBag.Title = "Index";
}

@Html.Raw(ViewBag.HtmlOutput)

【问题讨论】:

  • 我承认直接注入html有很多原因,但我很好奇你为什么会出现这种情况?
  • 我有一些从 dll 生成标记的遗留代码。

标签: asp.net-mvc-3 controller return


【解决方案1】:

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

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

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

@Html.Raw(Model)

【讨论】:

    【解决方案2】:

    只需在您的视图模型中创建一个 MvcHtmlString 类型的属性。你也不需要 Html.Raw 它。

    【讨论】:

    • 谢谢。没有完全按照你说的使用。你所说的帮助我弄清楚使用 [DataType.Html]
    【解决方案3】:

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

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

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

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

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

    【讨论】:

    • 我同意视图生成 html。我的内容思想是从旧版 dll 生成的。如果控制器不是调用的正确位置,那么可能是模型?
    • 使用字符串的返回类型很有趣。这一直有效吗?
    • 是的。任何不是 ActionResult 的东西都被转换为字符串并返回响应
    • 有没有办法将它作为PartialViewResult返回?
    • 如果要确保呈现为html,添加第二个参数:return Content("&lt;html&gt;&lt;/html&gt;", "text/html");
    【解决方案4】:

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

    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

    希望能帮助别人。

    【讨论】:

    • 谢谢你,它真的帮了我:)
    【解决方案5】:

    在控制器中你可以使用MvcHtmlString

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

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

    <div>
            @ViewBag.EncodedHtml
    </div>
    

    【讨论】:

      【解决方案6】:
      public ActionResult Questionnaire()
      {
          return Redirect("~/MedicalHistory.html");
      }
      

      【讨论】:

      • 请在您的回答中描述问题是什么,以及这个 sn-p 将如何解决它,以帮助其他人理解这个答案
      【解决方案7】:

      对我有用的 (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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-24
        • 1970-01-01
        • 1970-01-01
        • 2012-05-23
        相关资源
        最近更新 更多