2012-07-11 73 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