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