3

これを行うにはもっと簡単な方法があるかもしれません。私の状況は、テキストと値を正常に入力したフォームにドロップダウンリストがあることです。また、クライアントで使用可能な db テーブルの同じテーブル行から関連する文字列値を追加する必要があるため、ユーザーがドロップダウンから選択すると、この関連データがフォームのテキスト ボックスに入力されます。私が扱っているレコードは 4 つしかないので、クライアントに保存することは大したことではありません。このデータをViewDataを介してリストとして渡し、javascript配列にロードすることを考えました。ユーザーがドロップダウンから選択すると、選択したインデックスを特定し、必要な関連データを配列から取得します。他の必要なデータにドロップダウン項目の値を既に使用しているため、サーバーに戻らずにこの関連データを取得する方法が必要です。

ありがとう、

マイク

4

2 に答える 2

7
var myArray = [
<% foreach (string item in ViewData["list"] as List<string>) { %>
"<%= item %>",
<% } %>
];

最後にカンマがあると IE で壊れると報告されているため、コードを管理しやすくするビュー拡張ヘルパー メソッドをお勧めします。

<%= Html.JavaScriptArray(ViewData["list"] as List<string>, "myArray") %>

このヘルパー メソッドをソリューションのどこかに配置します。

public static string JavaScriptArray(this HtmlHelper htmlHelper, IList<string> values, string varName) {
    StringBuilder sb = new StringBuilder("var ");
    sb.append(varName);
    sb.append(" = [");
    for (int i = 0; i < values.Count; i++) {
        sb.append("'");
        sb.append(values[i]);
        sb.append("'");
        sb.append(i == values.Count - 1 ? "\n" : ",\n"); // Not the prettiest but it works...
    }
    sb.append("];");
    return sb.toString();
}

技術的には、拡張メソッドはどこにでも使用できます。名前空間を .aspx ファイルに含めるだけで済みます。、などの論理的に分離されたクラスにそれらを保持するのが実際には最善MyApp.Mvc.Extensions.JavaScriptExtensionsですMyApp.Mvc.Extensions.LinkExtensions

于 2009-03-19T14:20:26.680 に答える
1

どうですか...

<%= new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ViewData["list"]) %>
于 2009-03-20T05:59:32.047 に答える