Asp.net mvc 3 ASP.NET MVC 3.0使用部分操作和jQuery ajax更新表单的元素内容/html
我在部分Asp.net mvc 3 ASP.NET MVC 3.0使用部分操作和jQuery ajax更新表单的元素内容/html,asp.net-mvc-3,jquery,Asp.net Mvc 3,Jquery,我在部分A中有部分A1 我需要在按钮A1B单击上渲染我的局部视图A1 为此,我有一个局部视图操作,其参数类型为局部视图A(因为对A有一些依赖关系) 我有onclick函数来调用我的A1Partialpartial操作: $(document).ready(function () { $("#A1B").click(function () { dataString = $("#myForm").serialize(); $.ajax({
A
中有部分A1
我需要在按钮A1B
单击上渲染我的局部视图A1
为此,我有一个局部视图操作,其参数类型为局部视图A
(因为对A
有一些依赖关系)
我有onclick函数来调用我的A1Partial
partial操作:
$(document).ready(function () {
$("#A1B").click(function () {
dataString = $("#myForm").serialize();
$.ajax({
type: "POST",
url: "/Controller/A1Partial",
data: dataString,
dataType: "json",
success: function (data) {
//not working here
$("#myDiv").html("");
$("#myDiv").html(data);
}
});
return false;
});
});
我从jQueryAjax发出的调用工作正常,数据字符串在控制器中得到反序列化,没有任何问题
但是我在$(“#myDiv”)中没有得到任何东西代码>看起来html没有通过
我需要做哪些更改才能使其正常工作?您表示希望使用JSON响应类型:
dataType: "json"
但您尝试将其当作HTML使用:
$('#myDiv').append(data);
因此,从AJAX请求中删除此数据类型:“json”
,在成功回调中,数据变量将表示A1Partial
返回的HTML。您必须在服务器上呈现部分视图,然后通过json发送HTML结果,如下所示:
public static class Renders
{
public static string RenderPartialView(this Controller controller, string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
在控制器中:
public JsonResult A1Partial(A model)
{
//Getting my deserialized model here successfully
//doing changes in the model collections
return Json(new
{
Html = this.RenderPartialView("A1Partial", model)
}, JsonRequestBehavior.AllowGet);
}
然后在JQuery代码中:
$("#myDiv").html(data.Html);
您是否使用fiddler之类的工具检查请求是否成功?i、 e.它返回200,您可以看到这个响应被发送到浏览器?@Vasya Pupkin,我仍然在您更新的问题中看到数据类型:“json”
。那么当您删除它时会发生什么呢?我认为您没有领会Darin的观点,您需要将数据类型更改为html,并且您的原始代码应该可以工作(使用append调用)@Vasya Pupkin,您不需要指定这个。jQuery将使用服务器内容类型HTTP响应头来猜测内容。但是设置数据类型:“html”
也没有错。为什么不像“returnpartialview”(“A1Partial”,model);”使用扩展方法“RenderPartialView”的目的是什么?在实际应用程序中,事情可能会出错,例如A1Partial中的代码可能引发db异常。。。我可以通过向我的JsonResult添加一个新参数来注意用户,该参数不是局部视图的一部分。
$("#myDiv").html(data.Html);