私はViewModel - Customerを持っています。ViewModelでIEnumerableをバインドしていない
...output customer info....
<div class="col-md-9">
@{
foreach (var Tag in Model.Tags)
{
@Html.DisplayFor(x => Tag.TagNo);
<br />
}
}
</div>
私はタグを非表示にしようとしています: - - スカラー顧客情報と一緒にforeachのを使用して
public class Tag
{
public int TagNo{ get; set; }
public DateTime CreatedDate { get; set; }
}
I出力ページへのタグの一覧:この内のIEnumerableコレクションがありますモデルバインダーのためのページ内のリスト私は再びデータベースをヒットする必要はありませんエラーになる:
0123:@{
int[] tagArray = Model.Tags.Select(x => x.TagNo).ToArray();
for (int i = 0; i < Model.Tags.Count(); i++)
{
@Html.Hidden("Tags[" + i + "]", tagArray[i])
}
}
は、これは、この出力します
Creating HiddenFor IEnumerable<String> in View
しかし、とき:例えば - 私はあなたがモデルバインダーは、結合リストに理解することに一定の形式で(上記のように)配列を使用することができますと言って上の様々な質問を見ている
<input id="Tags_0_" name="Tags[0]" type="hidden" value="21111111" />
etc
ページにエラーがあり、デバッガを使用してポストに何がバインドされているかを確認します.3つの要素があるように見えますが、すべて空です。
@Html.Hidden("Tags[" + i + "].TagNo", tagArray[i])
をしかしCustomer.Tagsコレクションは、投稿後に空である:
また、私はこれを試してみました。
私は間違っていますか?モデルのバインダーに表示されるように、ページのこのタグのリストを非表示にするにはどうすればよいですか?
強く型付けされたヘルパーを使用してください - '@ Html.Hidden(M => M [i]の.Tags.TagNo)'( 'CreatedDate'用同上)ので、あなたが生成します正しいhtml。しかし、なぜあなたはこれをやっているのですか?必要に応じてPOSTメソッドでコレクションをもう一度入手してください。その余分なHTMLをすべて生成してクライアントに送信し、それをそのまま元に戻して送信するだけでは、パフォーマンスが低下します。 'Tags'プロパティは' IList ' –
Thxである必要があることに注意してください。私はこれをやっていますので、モデルエラーがあればリストを再度取得するためにデータベースにヒットする必要はありませんか?私は明白な何かを欠いていますか – niico
クライアント側の検証を設定している場合は、まれにヒットする必要があります。 –