2013-10-25 41 views
0

(型號=>模型[I] .prop)我想作此代碼的工作:MVC TextBoxFor內的javascript循環

$('#ddl').change(function() { 

      $('#cont').html(''); 
      var count = getCount($('#ddl').val()) 
      for (var i = 0; i < count ; i++) { 
       var html = '<div class="display-row">' + 
       '<div class="display-label">' + 
       'Vrednost:' + 
       '</div>' + 
       '<div class="display-field">' + 
       'Od: @Html.TextBoxFor(model => model[i].Od) Do:@Html.TextBoxFor(model => model[i].Do)' + 
      '@Html.ValidationMessageFor(model => model[i].Do)' + 
        '</div>' + 
       '</div>'; 
       $('#cont').append(html); 
      } 

     }); 

我只是需要做得到i價值爲model[i] JS循環內。

我該如何做到這一點?

+0

在Razor中,我們只能在c#中運行它時才能訪問循環索引。你可以混用c#和Razor代碼,但c#永遠不會接受Javascript代碼。 – Adrian

回答

0

「我只需要在js循環中獲得模型[i]的i的值。」

如果你想這樣做,你可以做一個ajax請求並檢索你的模型作爲json對象。然後遍歷你的列表並做你想做的事情。

在你的控制器創建的操作方法將返回你的模型的列表:

return json(your model list); 

和JS做:

$.post(url, {}, function(data){ 
    for(var i = 0; i < data.lenght; ++i) { 
    } 

}); 

編輯: 當您在服務器端使用@Html.TextBoxFor(model => model[i].Od)這個HTML將生成:

<input type="text" name="[i].Od" data-val="true" data-val-required="validationMessage" /> 

所以你可以自己創建這些標籤,而且你通常將它們放在一個表單中。 但對於驗證你可以這樣做:

//Remove current form validation information 
$("form") 
    .removeData("validator") 
    .removeData("unobtrusiveValidation"); 

//Parse the form again 
$.validator 
    .unobtrusive 
    .parse("form"); 

(從這個post最後的代碼)

+0

這些字段將是輸入字段,所以我只需要生成x個文本框與適當的驗證。 – gMailMan

+0

@ gMailMan參見編輯 – MRB

+0

是的,我想我必須這樣做,但我的意思是使用幫助器,每次都會生成正確的驗證,即使在我的模型中進行更改也是如此。但我不知道我必須刪除並再次解析表單,謝謝。 – gMailMan

0

你不能這樣做。 ASP.NET是在服務器上生成的,Javascript只在你的瀏覽器中運行。

+0

如果你的意思是我不能混合js和剃刀,是的,我可以。我唯一的問題是我變量。如果我設置模型[0]我得到的texctes corect數量,但他們沒有獨特的編號和名稱的 – gMailMan

+0

@gMailMan你可以,但不是你的想法。你不能在客戶端通過JS循環模型的數組 – VladL

0

ASP.net代碼在服務器上運行,首先,任何在Javascript發生之前。在Javascript代碼運行時,頁面就是文本 - 你不能像這樣調用模型[i]。你有兩個選擇:

  1. 如果你的模型是相當小的,你可以在服務器端代碼,必須通過剃刀迭代並生成一個包含JavaScript數組出模型的字符串,發射出的頁面,然後讓你的JavaScript迭代通過該數組。

  2. 如果您的模型(或其數據)足夠大以至於您不想將其全部內容寫入頁面,也可以在您的控制器上創建一個返回json的方法,並讓您的JavaScript代碼通過ajax調用它。