Asp.net mvc 2 从字符串呈现ASP.NET MVC视图
无论出于何种原因,这可能是一个坏主意,但我仍然想实现它。有没有一种方法可以从包含一些HTML和代码块的字符串中呈现视图?我最初的想法是实现Asp.net mvc 2 从字符串呈现ASP.NET MVC视图,asp.net-mvc-2,Asp.net Mvc 2,无论出于何种原因,这可能是一个坏主意,但我仍然想实现它。有没有一种方法可以从包含一些HTML和代码块的字符串中呈现视图?我最初的想法是实现IView,并让它在构造函数中获取HTML字符串。然后将其与模型一起传递给视图方法,如下所示: public ActionResult MyAction() { var str = @"<html><body><%= Model.SomeProperty %></body></html>";
IView
,并让它在构造函数中获取HTML字符串。然后将其与模型一起传递给视图
方法,如下所示:
public ActionResult MyAction() {
var str = @"<html><body><%= Model.SomeProperty %></body></html>";
var myView = new MyIView(str);
return View(myView, Model);
}
public ActionResult MyAction(){
var-str=@;
var myView=新MyIView(str);
返回视图(myView,Model);
}
在这一点上,我有点卡住了,因为我不知道如何调用视图引擎来解析字符串并使其正常工作。或者,在这一点上,我必须自己解析并呈现它吗?不幸的是,这对于ASPX页面来说并不容易 实际上,这要容易得多
如果确实要执行此操作,请注册一个自定义的
virtualPath提供程序
,该提供程序解析字符串的特殊路径,然后调用BuildManager.CreateInstanceFromVirtualPath
,将其强制转换为ViewPage
,设置其ViewData
,然后调用RenderView
您只需在操作中返回string
public string MyAction() {
return @"<html><body>" + Model.SomeProperty + @"</body></html>";
}
公共字符串MyAction(){
返回@Model.SomeProperty+@;
}
要添加到SLaks应答,如果您只想在控制器中硬编码一些返回值,那么您可以手动构建字符串:var str=@”“+Model.SomeProperty+@”“
。但是,如果您真正想做的是将视图存储在数据库中(而不是作为文件),那么您必须实现一个VirtualPathProvider,它将数据库的内容返回到特定路径。我已经实现了一个VirtualPathProvider
,它工作得很好,只有一个例外。提供的视图无法使用强类型模型。我总是得到无法加载类型“System.Web.Mvc.ViewPage”。
有什么想法吗?@Freyday:更改VirtualPathProvider
以提供实际的bin
目录(其中包含已编译的DLL和模型类)。他的意思是如果用户设置了某个属性,它们可能包含恶意脚本标记,该标记将被注入到您的响应中并由浏览器执行。用户不会设置模型中的任何属性。仅限管理员/开发人员使用。这确实不是我要寻找的解决方案类型。原始问题中包含的示例已简化,以说明我试图实现的目标。