刷新部分视图

时间:2017-01-30 22:54:31

标签: ajax asp.net-mvc-4

需要帮助从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);
}

我无法重新加载局部视图。我究竟做错了什么?我知道它在某个地方非常愚蠢,但无法弄明白。

谢谢你。

1 个答案:

答案 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()