Asp.net mvc 2 从字符串呈现ASP.NET MVC视图

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>";

无论出于何种原因,这可能是一个坏主意,但我仍然想实现它。有没有一种方法可以从包含一些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和模型类)。他的意思是如果用户设置了某个属性,它们可能包含恶意脚本标记,该标记将被注入到您的响应中并由浏览器执行。用户不会设置模型中的任何属性。仅限管理员/开发人员使用。这确实不是我要寻找的解决方案类型。原始问题中包含的示例已简化,以说明我试图实现的目标。