[長い質問のため申し訳ありませんが、問題を説明する必要があります]ASP.NET MVCビューページでC#を使用してJavaScriptを生成するのは正しいですか?
私は学習用のウェブサイトに取り組んでおり、ユーザーにメッセージの一覧を表示することになっています。
alt text http://i25.tinypic.com/107j504.png
ユーザーが閉じるボタンを押すと、そのメッセージは「読み取り」と次回を示すべきではないとマークする必要があります。このような何か。次のコードは、それらのメッセージを生成するために使用されます:ガイドラインに従って、その後
<% foreach (var m in Model.UserMessages) { %>
<div class="um" id="m<%=Html.AttributeEncode(m.ID) %>">
<p class="mh"><%= Html.Encode (String.Format ("From {0} ({1})", m.From, m.Sent)) %></p>
<p><%= Html.Encode (m.Text) %></p>
<% using (Html.BeginForm ("CloseMessage", "Home", new { id = m.ID })) { %>
<input type="submit" value="Close<%= Html.AttributeEncode (m.ID) %>" id="c<%= Html.AttributeEncode (m.ID) %>"/>
<% } %>
</div>
<% } %>
を、私は読んとしてメッセージをマークして、ビューをリフレッシュコントローラにおけるHTTP POSTメソッドのサポートを追加(JavaScriptを無効にし処理するために) :
次に、メッセージのみがなくなるように(jQueryを使用して)JavaScriptサポートを追加したいと考えました。しかし、問題は、ボタンとメッセージをプログラムで生成していることです。
だからビューページに奇妙な探してjavascriptのコードになってしまった:
<script type="text/javascript">
$().ready(function() {
<% foreach (var m in Model.UserMessages) { %>
$("#c<%=Html.AttributeEncode (m.ID) %>").click(function(event) {
$.post("Home/CloseMessage/<%=Html.AttributeEncode (m.ID) %>");
$("#m<%=Html.AttributeEncode (m.ID) %>").slideUp("slow");
event.preventDefault();
});
<% } %>
});
</script>
これは、基本的には、実際に動作しますが、私が消化するためにあまりにも多くのC#のループ内のJavaScriptコードを作成しています。これを行うためのより良い方法はありますか?
C#、直接このようなHTMLとスクリプトを書き出すせるに代わるものをあなたのUserMessageリストをRepeaterにバインドし、それから何かhtmlを出力することです。 IDなどの動的コンテンツは、RepeaterのItemDataBoundイベントで設定できます。 –
これはMVCに関するものではありません。あなたはその場合にMVCの批判として私のコメントを読むことができます:) –