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

时间:2009-11-18 14:33:29

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

我正在使用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视图。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

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

        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

答案 1 :(得分:0)

要获取实际视图html使用:

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

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

答案 2 :(得分:0)

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

似乎最好的解决方案是简单地再做一次GET(使用JQuery)并手动检索View。

相关问题