2010-12-19 10 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

フレデリック、Omkarはあなたの直前に来ましたが、私はそれをマークしました:) –

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

を動作するはず

+0

おかげでOmkarはちょうど1時間見て過ごして、あきらめようとしていました。 –

2

私は今あなたと違う、より良いアプローチを取っておきたいと思います。同じページにC#、javascript、HTMLを混在させているのがわかりますタグをつけたスジ。

改善番号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を使ってマークアップを強化:ASPはサーバーサイドである一方、

$(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を学び始めたばかりですので、あなたが提供してくれた助けに本当に感謝しています。私はテンプレートについてもっと読んで、うまくいけばそれらを差し込み始めます。 –

0

Javascriptがクライアント側です。言い換えれば:

  1. ASPは、HTML
  2. HTMLをあなたのJavaScriptはブラウザで実行されるブラウザ
  3. に送信されますが生成されます。

元のコードが機能しないのはそのためです。 iは、生成されたhtmlには存在しません。

関連する問題