2010-12-19 128 views
1

只需進入JQuery和Asp.net MVC 2並想知道如何將循環中的變量傳遞給JavaScript函數。如何在jQuery中爲循環變量傳遞變量

所以我必須:

<% int i = 0; %> 
<% foreach (var item in Model) { %> 

    <tr> 
     <td> 
     <input type="button" id="btnSubmit" value="Save" onclick="javascript:updatePerson(i);" /> 
     <input type="text" id='<%= "persons[" + i + "].Name" %>' name='<%= "persons[" + i + "].Name" %>' value='<%=item.Name %>' /> 
     </td> 

    </tr> 

    <% i++; %> 
<% } %> 

顯然

onclick="javascript:updatePerson(i);" 

是錯誤的。

如何將變量i傳遞給updatePerson函數?

JD

回答

1

你可以在你這樣做是在你的代碼的其餘部分以同樣的方式你的Javascript表達嵌入的i當前值:

<input type="button" id="btnSubmit" value="Save" 
    onclick="updatePerson(<%= i %>);" /> 
+0

感謝Frederic,Omkar進來之前,但我確實標記了:) – 2010-12-19 09:00:29

1
onclick="javascript:updatePerson(<%=i%>);" 

應工作

+0

感謝Omkar,只花了一個小時看,即將放棄。 – 2010-12-19 08:59:56

2

我建議你採取一種不同的,更好的方法,因爲現在我看到你正在將C#,JavaScript和HTML混合到同一頁面中,導致所謂的h可怕的標籤湯。

所以改進1號:使用編輯器模板而不是那些foreach循環。在你的主視圖,而不是寫什麼你已經張貼在你的問題只是:

<%= Html.EditorForModel() %> 

,然後定義編輯模板,這將自動爲您收集的模型中的每個元素(~/Views/Home/EditorTemplates/Person.ascx)被稱爲:

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<YourApp.Models.Person>" %> 
<tr> 
    <td> 
     <% using (Html.BeginForm("Save", "Persons", 
      new { id = Model.Id }, FormMethod.Post, 
      new { @class = "saveform" })) { %> 
      <%= Html.TextBoxFor(x => x.Name) %> 
      <input type="submit" value="Save" /> 
     <% } %> 
    </td> 
</tr> 

請注意,部分名稱與強類型名稱相同(Person.ascx)。另請注意位置:~/Views/Home/EditorTemplates其中Home當然是當前控制器的名稱。如果您想在多個控制器之間重複使用,也可以將它放在~/Views/Shared/EditorTemplates中。而且由於編輯器模板是強類型化的視圖模型,您可以使用強類型幫助程序(如Html.TextBoxFor),以便您不必手動硬編碼文本框的名稱和值,並想知道爲什麼模型聯編程序無法正常工作。

改進號2:逐步提高在一個單獨的JavaScript文件中使用jQuery您的標記:

$(function() { 
    $('.saveform').submit(function() { 
     // When the form is submitted 
     // For example you could call the associated action using AJAX: 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: $(this).serialize(), 
      success: function(result) { 
       alert('successfully saved'); 
      } 
     }); 
     return false; 
    }); 
}); 
+0

非常感謝。我剛開始學習ASP.NET MVC2和JQuery,所以我非常感謝你提供的幫助。我將閱讀更多關於模板的內容,並希望開始插入它們。 – 2010-12-19 22:11:48

0

JavaScript是客戶端,而ASP是服務器端。換句話說:

  1. ASP生成HTML
  2. 的HTML被髮送到瀏覽器
  3. 你的JavaScript是由瀏覽器執行。

這就是爲什麼您的原始代碼不起作用。在生成的html中不存在i