我有一个ASP.NET MVC应用程序,我需要添加内容管理页面。由于它的CMS,页面的路径将是可变的。我试图弄清楚如何让ASP.NET显示一个可变的视图。控制器是什么样的?
代码是这样的: Dim MyView As New System.Web.Mvc.ViewResult() 返回MyView
但这并不能让我定义视图的内容,我不知道该怎么做。视图实际上不存在;我需要从我的数据库中的数据动态生成它。我将HTML存储在数据库中。
答案 0 :(得分:1)
您可以手动创建内容",不使用Razor视图,并在动作方法中使用生成的HTML而不是Content
返回View
。
编辑:
或者,创建一个包含所有公共元素的主视图,这些元素将生成的内容作为字符串接受:
@model string
<html>
<!-- all the common stuff here -->
@Html.Raw(Model)
<!-- more common stuff -->
</html>
您的控制器将生成HTML并将其传递给此视图:
public ActionResult Index()
{
var html = GenerateContent(); // or whatever
return ActionResult("MasterView", (object)html);
}
将第二个参数强制转换为对象非常重要,否则会将其解释为布局位置。
如果您需要在公共组件之间插入生成的内容,您可以将字符串字典作为模型传递,并仅渲染您喜欢的部分,例如。 Html.Raw(Model["footer"])
答案 1 :(得分:0)
控制器是什么样的?
public ActionResult Index()
{
string dynamicViewName = "~/Views/Shared/FooBar.cshtml";
return View(dynamicViewName);
}
如果您愿意,也可以指定布局:
public ActionResult Index()
{
string dynamicViewName = "~/Views/Shared/FooBar.cshtml";
string dynamicLayout = "~/Views/Shared/_SomeLayout.cshtml";
return View(dynamicViewName, dynamicLayout);
}