0

私は本当に奇妙なものを持っています。

私はマスターと詳細の関係を持っています。これを Order と OrderItem と呼びましょう。フロント ページには注文のリストがあり、各行の横には編集ページに移動する [編集] リンクがあります。上部に注文の詳細を表示し、下部に注文項目の詳細を編集する必要があります。

ただし、「注文アイテム」フォームの「ID」非表示フィールドには、「注文」ID 値が表示されています。さらに奇妙なのは、DisplayFor が正しい値を表示し、HiddenFor と EditorFor が「Order」ID 値を表示することです。

ビュー モデルを使用して、コントローラーに入力する Razor ビューのマスター エンティティと詳細エンティティを含めています。

Order# = 16 および OrderItem# = 7 と仮定します。

そう :

@model vmOrder // ViewModel that contains myOrder and MyOrderItems.

@Html.EditorFor(m=>m.myOrderItems.First().Id) // Produce 16
@Html.HiddenFor(m=>m.myOrderItems.First().Id) // Produce 16
@Html.DisplayFor(m=>m.myOrderItems.First().Id) // Produce 7 which is correct.

最初のレコードを返すつもりだったので、他の理由で "First()" を返しました。MVCが混乱しているようです...

何かご意見は。私には最も奇妙に思えますか?

どうもありがとう、

サム

4

1 に答える 1

1

とはmyOrderItems? 遅延 LINQ クエリの結果が含まれている場合は、呼び出すたびにクエリFirstが再評価されます。クエリの記述方法によっては、これにより値が変化する可能性があります。

myOrderItems が の場合はIEnumerable、呼び出しているToListToArray、クエリを強制的に実行していることを確認してください。

第二に、何度も電話をかけないでくださいFirst。このようなことを試してください。

@model vmOrder // ViewModel that contains myOrder and MyOrderItems.

@var first = Model.myOrderItems.First()
@Html.EditorFor(m => first.Id)
@Html.HiddenFor(m => first.Id) 
@Html.DisplayFor(m => first.Id)
于 2013-07-02T18:03:54.503 に答える