需要帮助从ajax调用中刷新MVC中的部分视图。 在我的View page.cshtml
中 <div id="tblOptions">
@Html.DropDownListFor(model => model.State , new SelectList(), new {id="ddlstate"})
@html.HiddenFor(model => model.optionsId)
@Html.CheckBoxFor(model => model.PrintAddress)
........
</div>
在页面加载时,模型已正确填充,所有复选框都已正确填充。现在onChange事件的下拉列表,我需要用新的模型值填充复选框,
我有一个ajax调用,它返回jsonresult
$(document).on('change', '#ddlstate', function () {
$.ajax({
type: 'GET',
url: '/Home/CallonChange',
contentType: 'application/html; charset=utf-8',
data: { PersonCode: '@Model.PersonCode', selectedstate: $('#ddlState').val() },
dataType: 'json',
beforeSend: function (jqXHR, settings) {
$('tblOptions').html('');
}
})
.done(function (data, textStatus, jqXHR) //success callback
{
if (data != null) {
// not loading
$('tblOptions').html(data);
}
else { //display error message
}
})
.fail(function (jqXHR, textStatus, errorThrown) //error callback
{
//display error message
});
});
});
它在JSON结果中返回新模型,但部分视图不会使用新值重新加载。
在Controller中,我有两个动作控制器,一个在Load上调用,一个在SelectionChange上调用
[HttpGet]
public ActionResult CallOnLoad(string PersonCode, string selectedstate = "") {
ModelA a = new ModelA(PersonCode, selectedstate);
return PartialView("Home/page", options);
}
[HttpGet]
public JsonResult CallonChange(string PersonCode, string selectedstate= "")
{
ModelA a = new ModelA(PersonCode, selectedstate);
return Json(options, JsonRequestBehavior.AllowGet);
}
我无法重新加载局部视图。我究竟做错了什么?我知道它在某个地方非常愚蠢,但无法弄明白。
谢谢你。
答案 0 :(得分:0)
您的代码有两个问题。
首先,jQuery选择器对于你想要的元素和数据是不正确的,它需要
$('#tblOptions').html(data); // not $('tblOptions')
接下来,您要使用html更新元素,因此您的方法需要返回PartialViewResult
,而不是JsonResult
,因此您应该调用CallOnLoad()
方法,而不是{{ 1}},所以你ajax应该是
CallonChange()
另请注意$.ajax({
type: 'GET',
url: '@Url.Action("CallOnLoad", "Home")', // not '/Home/CallonChange'
毫无意义,可以删除
或者,您可以使用contentType: 'application/html; charset=utf-8',
方法返回json,只需根据模型属性更新现有元素的值,例如
CallonChange()