Javascript ASP.NET MVC 3-Ajax更新表-模型

Javascript ASP.NET MVC 3-Ajax更新表-模型,javascript,ajax,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-partialview,Javascript,Ajax,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Partialview,我试图用ajax更新一个记录列表,它在一个表中表示,其中每个记录都作为一个javascript删除链接。如果我预加载表,RemoveLink可以正常工作,但是一旦通过ajax更新了div“RecordListPartialView”,它就不再工作了 我用firebug检查了生成的html代码对于每一行都是正确的。看起来浏览器没有意识到新代码,因此不会触发javascript链接 有人能解释一下发生了什么事吗 (1) 以下是查看代码: $(“.RemoveLink”)。单击(函数(){ var_i

我试图用ajax更新一个记录列表,它在一个表中表示,其中每个记录都作为一个javascript删除链接。如果我预加载表,RemoveLink可以正常工作,但是一旦通过ajax更新了div“RecordListPartialView”,它就不再工作了

我用firebug检查了生成的html代码对于每一行都是正确的。看起来浏览器没有意识到新代码,因此不会触发javascript链接

有人能解释一下发生了什么事吗

(1) 以下是查看代码:

$(“.RemoveLink”)。单击(函数(){
var_id=$(this.attr(“数据id”);
var recordToDelete={id:_id};
var json=$.toJSON(recordToDelete);
$.ajax({
url:“/MortagePayment/RemoveMortageRecord”,
键入:“POST”,
数据类型:“json”,
数据:json,
contentType:'application/json;charset=utf-8',
成功:功能(数据){
$(“#RecordListPartialView”).empty();
$(“#RecordListPartialView”).html(data.Message);
}
});
});
$(“.AddLink”)。单击(函数(){
var _year=$(“#新记录_year”).val();
var_month=$(“#NewRecord_month”).val();
var_mortageValue=$(“#NewRecord_mortageValue”).val();
var newRecord={年:\年,月:\月,抵押价值:\抵押价值};
var json=$.toJSON(newRecord);
$.ajax({
url:“/MortagePayment/AddMortageRecord”,
键入:“POST”,
数据类型:“json”,
数据:json,
contentType:'application/json;charset=utf-8',
成功:功能(数据){
$(“#RecordListPartialView”).empty();
$(“#RecordListPartialView”).html(data.Message);
$(“新纪录年”).val(0);
美元("新纪录).val(0);;
$(“新记录抵押价值”).val(0);
}
});
});

@Html.Partial(“MortageRecordList”,Model.MortageRecordList)
(2) 局部视图


当前的削减
年
月
价值
@foreach(模型中的var项目){
@项目.年份
@项目.月份
@项目.抵押价值
删除

}
(3) 以及控制器:

[HttpPost]
公共行动结果AddMortageCord(MortageCord新记录){
var mortageRecordSet=mortageRecordSet.GetMortageSet(this.HttpContext);
if(ModelState.IsValid)
MortageCordset.addMortageCord(新记录);
string partialViewHtml=RenderPartialViewToString(“mortagecordlist”,mortagecordset.GetMortageItems());
返回Json(新的{Success=true,Message=partialViewHtml});
}
[HttpPost]
公共JsonResult RemoveMortageCord(内部id){
var mortageRecordSet=mortageRecordSet.GetMortageSet(this.HttpContext);
removeMotageRecord(id);
string partialViewHtml=RenderPartialViewToString(“mortagecordlist”,mortagecordset.GetMortageItems());
返回Json(新的{suces=true,Message=partialViewHtml});
}

我认为您可能需要再次调用click处理程序,以便将其重新附加到新的DOM元素,因为当您实际调用
$(“.RemoveLink”)。click()
$(“.AddLink”)。click()
函数时,jQuery使用正确的类迭代所有元素,如果我没弄错的话,我不会在点击某个东西时懒洋洋的。

如果我预加载表,RemoveLink可以正常工作,但是一旦div “RecordListPartialView”是通过ajax更新的,不再有效

更改您的
。单击带有
事件。live

$(".RemoveLink").live("click",function(){
    //any click event code comes here
});

好的,您是否在一个单独的.js脚本文件中有一个jquery事件,并将事件附加到PartialView中的元素

嗯!如果是,每当PartialView再次呈现自己时(无论原因是什么),它的所有绑定事件都将消失!然后,在渲染PartialView之后,应该重新绑定它们

有不同的方法,例如:

  • Ajax.ActionLink
    (或使 PartialView(重新渲染)设置为一个jquery函数,该函数 重新绑定PartialView的事件

  • 从单独的.js中移动所有jquery事件绑定代码 脚本文件到PartialView文件(cstml)的内部。在里面 在这种情况下,每次呈现PartialView时 将再次绑定


  • 这里有一个小的更新。从1.7开始,您应该改为使用:$(“.RemoveLink”).on(“click”,function(){…})。从1.7开始对live进行折旧,并在1.9中删除。