我正在使用C#,MVC。
我遇到PartialView和jquery加载正常工作的问题。
当用户点击名为Kit的超链接时,我会调用以下内容:
public ActionResult KitsEdit(string id)
{
int idnbr = Convert.ToInt32(id);
var Progs = db2.usp_KitInfo(idnbr)
.OrderBy(x => x.TDate).ToList();
return PartialView(Progs);
}
可以在页面上加载PartialView。
View包含行,每行都有一个编辑超链接。 当用户单击编辑超链接时,我会显示一个对话框,用户可以在其中修改每行上显示的某些信息并点击提交。这第一次工作正常。
在提交时,我打电话给我做一些验证然后打电话:
$("#stlist").load('@Url.Action("KitsEdit", "Spr")' + '?id=' + '@Model.id');
因为我需要在页面上重新加载局部视图,以便用户可以看到更新的信息。
页面的负载在表面上工作正常。但是,当我在执行.load之后单击编辑超链接时,会发生一些功能,而对话框会显示一些功能,然后才能工作。例如,复选框不起作用,如果我单击它,该值不会正确传递回控制器操作。另外,对于提交,我在点击时有一些代码但是那些甚至都不起作用。它与控制器动作完全相同,并绕过
中的所有代码 $("#submit").click(function ().
请注意,只有在调用load()之后才会发生这种情况。
问题:除了.load()之外还有什么东西可以在页面上加载PartialView。如果没有,我怎么能让它与.load()一起正常工作。
以下是提交点击的内容:
$("#submit").click(function () {
// following .on code won't execute code inside of function so have it commented
// $("#submit").on("click", function () {
var inactivedate = $("#InactiveDate").val();
var inactivecheck = $('#Inactive').is(':checked');
var inactivereason = $('#InactiveReason option:selected').text();
if ((!inactivedate || !$.trim(inactivedate)) && $('#Inactive_cb').attr('checked') == true) {
alert('Inactive Date must be entered.');
return false;
}
if ($('#Inactive_cb').attr('checked') == true && inactivereason == '<Choose>') {
alert('Inactive Reason must be selected.');
return false;
}
var url = '@Url.Action("EditTrain", "Spr")';
$.ajax({
type: "POST",
url: url,
async: false,
data: $('#theForm').serialize()
});
$("#stlist").load('@Url.Action("kitsEdit", "Spr")' + '?id=' + '@Model.spkrid');
parent.$.fn.colorbox.close();
return false;
});
});
提前致谢。
答案 0 :(得分:0)
您是否在部分视图中有任何JavaScript代码?如果您在部分视图中连接了任何事件,则在重新加载控件时它们将无法工作。
如果您需要重新绑定事件,请在进行AJAX调用后在success
函数中执行此操作。
答案 1 :(得分:0)
您正确使用.load(),但您需要更改事件处理程序以使用.on()或.delegate()将事件绑定到新创建的元素上。像这样:
$("#submit").on("click", function(){
//do your stuff
});
答案 2 :(得分:0)
load
函数动态地向DOM注入一些新内容。所以旧的事件绑定不适用于新元素。您需要使用jQuery on
更改
$("#submit").click(function (e) {
//some code
});
到
$(document).on("click","#submit",function (e) {
e.preventDefault() // if you need
//some code
});
jquery on适用于当前和未来的元素。
答案 3 :(得分:0)
$("#submit").live('click', function () {}
这应该有效