代码之家  ›  专栏  ›  技术社区  ›  Martin at Mennt

使用JSON(ASP MVC 3)返回Razor局部视图

  •  5
  • Martin at Mennt  · 技术社区  · 16 年前

    在使用常规视图引擎的MVC 2中,我可以通过 return Json()

    但是有了新的razor.cshtml视图,我无法理解如何做到这一点。我不断地得到 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 View引擎修复此问题有何想法?

    这是我的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();
        }
    
    2 回复  |  直到 16 年前
        1
  •  6
  •   Buildstarted    16 年前

    这个 可以 帮助你,因为我已经把它从我的头上写下来了,没有测试它,除了验证它返回渲染的CSHTML文件。

    我假设这是控制器中的一种方法。

    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;
    }
    
        2
  •  5
  •   Martin at Mennt    16 年前

    这是该代码的MVC 3测试版:

        private string ControlToString(string controlPath, object model)
        {
            //CshtmlView control = new CshtmlView(controlPath);
            RazorView control = new RazorView(this.ControllerContext, controlPath, null, false, null);
    
            this.ViewData.Model = model;
    
            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;
        }