【问题标题】:MVC Ajax - Parsing Form Submission Return DataMVC Ajax - 解析表单提交返回数据
【发布时间】:2009-11-18 14:33:28
【问题描述】:

我正在使用 MVC Ajax 进行表单提交。我无法做到的是让服务器上的 Action 将部分视图返回给浏览器。

表单提交如下所示:

<% using (Ajax.BeginForm("Add", "Example", new AjaxOptions { HttpMethod = FormMethod.Post.ToString(), OnComplete = "widgetAdded" } )) { %>

这会命中服务器并执行操作。操作完成后执行的 JavaScript 方法“widgetAdded”如下所示:

function widgetAdded(ajaxContext) {
    var response = ajaxContext.get_response().get_object();
    alert(response);
}

如果我在这样的操作中返回 Json 结果,它会起作用 - 警报会显示从服务器传递的数据。

return Json("bob");

现在,如果我将操作更改为像这样返回 PartialView,它就不起作用了。

return PartialView("Widgets");

我试图在 Firebug 中询问响应对象,但我似乎无法获得实际的视图 html。有什么想法吗?

【问题讨论】:

    标签: c# asp.net-mvc ajax asp.net-ajax


    【解决方案1】:

    你可以把你的局部视图渲染成一个字符串,然后返回这个字符串:

            public static string RenderPartialToString(string controlName, object viewData, object model, System.Web.Routing.RequestContext viewContext)
            {
    
                ViewDataDictionary vd = new ViewDataDictionary(viewData);
                ViewPage vp = new ViewPage { ViewData = vd };
    
                vp.ViewData = vd;
                vp.ViewData.Model = model;
                vp.ViewContext = new ViewContext();
                vp.Url = new UrlHelper(viewContext);
    
                Control control = vp.LoadControl(controlName);
    
                vp.Controls.Add(control);
    
                StringBuilder sb = new StringBuilder();
    
                using (StringWriter sw = new StringWriter(sb))
                {
    
                    using (HtmlTextWriter tw = new HtmlTextWriter(sw))
                    {
    
                        vp.RenderControl(tw);
    
                    }
    
                }
    
                return sb.ToString();
    
            }
    

    以上代码取自here

    【讨论】:

    • 这似乎可以工作,但它也似乎很混乱。如果没有这些额外的工作,我们不应该能够做到吗?
    【解决方案2】:

    要获得实际的视图 html 使用:

    alert(ajaxContext.get_response().get_responseData());
    

    get_object() 函数仅适用于 JSON 内容。

    【讨论】:

    • get_responseData 为我返回一个空字符串
    【解决方案3】:

    我做了更多研究,似乎无法将视图作为对 POST 操作的响应返回。我查看了发送给客户端的实际响应——如果我返回一个字符串(作为 Json),响应头实际上会被填充——如果我返回一个视图,那么响应头是空的。

    似乎最好的解决方案是简单地执行另一个 GET(使用 JQuery)并手动检索视图。

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多