C# MVC Ajax-解析表单提交返回数据

C# MVC Ajax-解析表单提交返回数据,c#,asp.net-mvc,ajax,asp.net-ajax,C#,Asp.net Mvc,Ajax,Asp.net Ajax,我正在使用MVCAJAX进行表单提交。我做不好的是让服务器上的操作将部分视图返回到浏览器 提交的表单如下所示: <% using (Ajax.BeginForm("Add", "Example", new AjaxOptions { HttpMethod = FormMethod.Post.ToString(), OnComplete = "widgetAdded" } )) { %> function widgetAdded(ajaxContext) { var resp

我正在使用MVCAJAX进行表单提交。我做不好的是让服务器上的操作将部分视图返回到浏览器

提交的表单如下所示:

<% using (Ajax.BeginForm("Add", "Example", new AjaxOptions { HttpMethod = FormMethod.Post.ToString(), OnComplete = "widgetAdded" } )) { %>
function widgetAdded(ajaxContext) {
    var response = ajaxContext.get_response().get_object();
    alert(response);
}
如果我在这样的操作中返回一个Json结果,它就会工作——警报显示从服务器传递的数据

return Json("bob");
现在,如果我更改操作以返回这样的PartialView,它将不起作用

return PartialView("Widgets");

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

您可以将局部视图渲染为字符串,然后返回字符串:

        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();

        }

上面的代码取自

,以获取html使用的实际视图:

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

get_object函数仅适用于JSON内容。

我做了更多的研究,似乎不可能返回视图作为对POST操作的响应。我查看了发送给客户机的实际响应——如果我返回一个字符串作为Json,则响应头实际上会被填充——如果我返回一个视图,则响应头为空


似乎最好的解决方案是使用JQuery执行另一次GET并手动检索视图。

这似乎可行,但看起来也相当混乱。如果没有这些额外的工作,我们就不能完成吗?get_responseData为我返回一个空字符串