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