在MVC 2与普通视图引擎,我可以通过return Json()
返回剃刀局部视图
但随着新的Razor .cshtml观点我无法弄清楚返回ASCX局部视图作为字符串这个怎么做。我一直在收到Type 'ASP.CustomerForm_cshtml' does not inherit from 'System.Web.UI.UserControl'.
部分视图继承自System.Web.Mvc.WebViewPage<T>
,并且如果我从第一个错误说的System.Web.UI.UserControl<T>
继承,则弹出另一个错误。
有关如何使用ASP MVC 3和Razor视图引擎解决此问题的任何想法?
这是我ControlToString功能:
private string ControlToString(string controlPath, object model)
{
ViewPage page = new ViewPage();
ViewUserControl ctl = (ViewUserControl)page.LoadControl(controlPath);
page.Controls.Add(ctl);
page.ViewData.Model = model;
page.ViewContext = new ViewContext();
System.IO.StringWriter writer = new System.IO.StringWriter();
System.Web.HttpContext.Current.Server.Execute(page, writer, false);
string outputToReturn = writer.ToString();
writer.Close();
//return this.Json(outputToReturn.Trim());
return outputToReturn.Trim();
}
谢谢你,它的工作原理。我将视图看作一个字符串。但是这个模型并没有在你的代码中的任何地方被照顾到。我尝试在'CshtmlView()'中将模型作为参数添加,但它没有将模型作为参数。有什么想法吗? – Martin 2010-09-13 06:10:03
我解决了这个问题,你必须在你的代码中添加'this.ViewData.Model = model;'然后它可以工作:D – Martin 2010-09-13 06:13:25