2012-07-11 76 views
1

我正在使用C#,MVC。MVC C#,部分视图,jquery load()在.load()被调用后无法正常工作

我遇到了部分视图和jquery加载正常工作的问题。

当用户点击超链接叫包,我拨打以下:

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之后第二次单击编辑超链接时,发生的情况是,当对话框显示一些以前工作的功能根本无法工作时。例如,如果我单击该复选框不起作用,则该值无法正确传递回控制器操作。此外,对于提交,我点击了一些代码,但那些甚至不工作。它去diectly控制器动作并绕过所有的代码在

$("#submit").click(function(). 

注意,这仅仅发生后负荷()被调用。

问:除了将加载页面上的PartialView的.load()之外,还有什么。如果没有,我怎么才能使它与.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

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作品为当前和未来元素。

+0

Shyju - 感谢您的回复。我替换$(“#submit”)。click(function(){with $(document).on(“click”,“#submit”,function(){但在$(document).on(“点击“,”#提交“,函数(){似乎得到执行,代码直接跳过控制器操作绕过点击代码 – 2012-07-11 18:09:05

+0

@NatePet:如果你想防止默认提交行为,请使用preventDefault方法。回答 – Shyju 2012-07-11 18:11:41

+0

谢谢您的答复。我e.preventDefault(),但仍然没有运气尝试过。里面的代码$(文件)。对的(“点击”,“#提交”功能(E)是不是被执行 – 2012-07-11 18:24:21

0

你有部分视图中的任何JavaScript代码吗?如果您在部分视图中连接了任何事件,则在您重新加载控件时它们将不起作用。

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

+0

加勒特感谢,但没有计划在被称为$( “#提交”)。该.load后点击(函数()()。这样,即使德成功没有按”将不起作用。我想,以后你的建议。 – 2012-07-11 17:21:42

0

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

$("#submit").on("click", function(){ 
    //do your stuff 
}); 
+0

谢谢,这似乎已经解决了与复选框工作的问题。但是,当我点击提交,它不执行任何代码,但。任何想法? – 2012-07-11 17:45:05

+0

任何?你可以摆弄你的问题的方式我无法理解至少说明在$代码(“#提交”)点击() – solidau 2012-07-11 17:49:54

+0

喜Juventus18 - 。我已经上传的代码提交我不是很拨弄它作为我有控制器,希望这会有所帮助。 – 2012-07-11 17:57:10

0
$("#submit").live('click', function() {} 

这应该工作

+0

贬值是所有这些代码。 – spadelives 2015-11-02 19:02:29