还有其他方法可以从控制器返回原始 html 吗?而不是仅仅使用 viewbag。如下所示:
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.HtmlOutput = "<HTML></HTML>";
return View();
}
}
@{
ViewBag.Title = "Index";
}
@Html.Raw(ViewBag.HtmlOutput)
这样做没有多大意义,因为
View
应该生成 html,而不是控制器。但无论如何,您可以使用 Controller.Content 方法,它使您能够指定结果 html,以及内容类型和编码
public ActionResult Index()
{
return Content("<html></html>");
}
或者您可以使用内置在 asp.net-mvc 框架中的技巧 - 让操作直接返回字符串。它将字符串内容传递到用户的浏览器中。
public string Index()
{
return "<html></html>";
}
事实上,对于除
ActionResult
以外的任何操作结果,框架都会尝试将其序列化为字符串并写入响应。
只需在 MvcHtmlString 类型的视图模型中创建一个属性。你也不需要 Html.Raw 了。
尝试返回引导程序警报消息,这对我有用
return Content("<div class='alert alert-success'><a class='close' data-dismiss='alert'>
×</a><strong style='width:12px'>Thanks!</strong> updated successfully</div>");
注意: 不要忘记在您的视图页面中添加 bootstrap
css
和 js
希望能帮助别人。
对我(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;
}
看起来不错,除非您想将其作为模型字符串传递
public class HomeController : Controller
{
public ActionResult Index()
{
string model = "<HTML></HTML>";
return View(model);
}
}
@model string
@{
ViewBag.Title = "Index";
}
@Html.Raw(Model)
public ActionResult Questionnaire()
{
return Redirect("~/MedicalHistory.html");
}
在控制器中你可以使用
MvcHtmlString
public class HomeController : Controller
{
public ActionResult Index()
{
string rawHtml = "<HTML></HTML>";
ViewBag.EncodedHtml = MvcHtmlString.Create(rawHtml);
return View();
}
}
在您的视图中,您可以简单地使用您在控制器中设置的动态属性,如下所示
<div>
@ViewBag.EncodedHtml
</div>