6

やあ、

リストを含む View クラスがあります。このリストは、ユーザーがアップロードした (html ヘルパーでレンダリングされた) 利用可能なファイルを説明しています。

送信時にこのデータを維持するために、次をビューに追加しました。

<%: Html.HiddenFor(model => model.ModelView.Files)%>

送信時に mode.ModelView.Files リストがアクションに返されることを望んでいましたが、そうではありませんか?

リストを隠しフィールドにすることはできませんか?

詳細情報 : ユーザーは、サービスに保存されたいくつかのファイルを送信します。保存されたファイルは GUID と呼ばれ、保存された画像をレンダリングするためにユーザーに送り返されるのはこのリストです。ユーザーがフォームにいくつかの変更を加え、再度送信を押すと、コントロール アクションに到達したときに画像リストが空になります。なぜですか?

よろしくお願いします

4

2 に答える 2

6

リストを隠しフィールドにすることはできませんか?

もちろん、それは不可能です。非表示フィールドは、1 つの文字列値のみを受け取ります。

<input type="hidden" id="foo" name="foo" value="foo bar" />

したがって、リストが必要な場合は、リストの項目ごとに複数の非表示フィールドが必要です。また、それらのアイテムが複雑なオブジェクトである場合は、リストの各アイテムの各プロパティに隠しフィールドが必要です。

または、はるかに簡単な解決策は、この隠しフィールドが一意の識別子を表すことです。

<input type="hidden" id="filesId" name="filesId" value="123" />

コントローラー アクションでは、この一意の識別子を使用して、最初にコレクションを取得した場所からコレクションを再フェッチします。

さらに別の可能性は、モデルを に永続化することSessionです (私の答えを完全にするためにセッションについて言及しているだけですが、実際に使用することをお勧めするものではありません)。

于 2011-01-31T19:31:20.693 に答える
3

始める前に、これが回答としてマークされた提案されたソリューションの 1 つの例であることを述べておきたいと思います。Darrin は正しく理解しました。提案されたソリューションの実装例を次に示します...

タイプ int の汎用リストを隠しフィールドに格納する必要があるという同様の問題がありました。私は次のような標準的なアプローチを試しました:

<%: Html.HiddenFor(foo => foo.ListOfIntegers) %>

ただし、それは例外となります。そこで、Darrin の提案を試し、上記のコードを次のコードに置き換えました。

<%
 foreach(int fooInt in Model.ListOfIntegers)
 { %>
<%: Html.Hidden("ListOfIntegers", fooInt) %>
<% } %>

これは私にとって魅力のように機能しました。ありがとうダーリン。

于 2011-08-31T14:55:13.373 に答える