在带有常规视图引擎的MVC 2中,我可以通过返回Json()将ascx局部视图作为字符串返回
但是使用新的Razor .cshtml视图我无法弄清楚如何做到这一点.我一直得到Type’AS.CustomerForm_cshtml’不从’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(); }
解决方法
这可能对你有帮助,因为我已经把它写在我的头顶而不测试它,除了验证它返回渲染的cshtml文件.
我以为这是Controller中的一种方法.
private string ControlToString(string controlPath,object model) { CshtmlView control = new CshtmlView(controlPath); HtmlTextWriter writer = new HtmlTextWriter(new System.IO.StringWriter()); control.Render(new ViewContext(this.ControllerContext,control,this.ViewData,this.TempData,writer),writer); string value = ((StringWriter)writer.InnerWriter).ToString(); return value; }