C# MVC Ajax-解析表单提交返回数据
我正在使用MVCAJAX进行表单提交。我做不好的是让服务器上的操作将部分视图返回到浏览器 提交的表单如下所示: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
<% 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为我返回一个空字符串