1

我正在使用 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。

视图有行,每行都有一个编辑超链接。当用户点击编辑超链接时,我会显示一个对话框,用户可以在其中修改每行显示的一些信息并点击提交。这第一次工作正常。

在提交时,我打电话给我做一些验证,然后打电话:

    $("#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;

     });
 });

提前致谢。

4

4 回答 4

1

load函数动态地向 DOM 注入一些新内容。所以旧的事件绑定不适用于新元素。你需要使用 jQueryon

改变

$("#submit").click(function (e) {
  //some code 
});

$(document).on("click","#submit",function (e) {
  e.preventDefault() // if you need
  //some code 
});

jquery适用于当前和未来的元素。

于 2012-07-11T18:01:05.480 回答
0

部分视图中是否有任何 JavaScript 代码?如果您在局部视图中连接了任何事件,那么当您重新加载控件时它们将不起作用。

如果您需要重新绑定事件,请success在进行 AJAX 调用后在函数中执行此操作。

于 2012-07-11T17:15:03.270 回答
0

您正确使用了 .load(),但您需要更改事件处理程序以使用 .on() 或 .delegate() 将事件绑定到新创建的元素上。像这样:

$("#submit").on("click", function(){
  //do your stuff
});
于 2012-07-11T17:20:32.880 回答
0
$("#submit").live('click', function () {}

这应该工作

于 2013-07-02T11:45:36.343 回答