updateModelは「ディープ」プロパティを更新していません
-
28-10-2019 - |
質問
ASP.NET MVCアプリケーションがあります。ある時点で、モデルの更新に使用したいコントローラー方法でフォームコレクションを取得します。コレクションでは、すべての値がそのモデルのプロパティではなく、更新されるプロパティはリストからのアイテムであり、そのリストは別のリストのアイテムでもあります。このようなもの(これが明確であることを願っています):
propertyToUpdate --> model.Items[0].Subitems[0].SomePropertyClass.Value;
コントローラーでこれを試しました:
UpdateModel(model);
問題は、これが機能していないことであり、反射が機能していないという事実と関係があると思います。私は探しに行き、つまずきました この記事. 。したがって、プレフィックスパラメーターを使用すると問題が解決することを理解しています。しかし、私の場合はそうではありませんが、プロパティはリストの項目としてモデルに「より深い」状態にあるためです。
誰かが私がこれをどのように解決できるか知っていますか?
アップデート:
これがプロパティの編集具合です。
@model Q95.Domain.Property
<li>
@Html.DisplayFor(p => p.Description) :
@Html.DisplayFor(p => p.Quantity.Value)
@Html.DisplayFor(p => p.Quantity.Unit.Description)
<br />
@Html.TextBoxFor(p => p.Quantity.Value)
</li>
このテンプレートは次のように呼ばれます。
<ul>
@Html.EditorFor(model => model.SegmentRequirement.MaterialRequirements[j].Properties)
</ul>
これで十分なコードですか、それともまだ欠けているものがありますか?
update2:
さて、すべてのサブプロパティで、パラメーターのないコンストラクターを定義しましたが、今私は次のように呼びます。
UpdateModel(segmentRequirement, "SegmentRequirement", form.ToValueProvider());
これによりモデルが更新されますが、MaterialRequirementsからのすべてが再インスタンス化されています...:s
解決
updateModelは「ディーププロパティ」で正常に動作します。
問題は、おそらくあなたが取得したコレクションのデータがプロパティ名と等しくないことです。
ページから得られる値を確認するには、3つの場所を確認してください
フォーム値。
ルートデータ
クエリ文字列
正確にその順序で。
キー したほうがいい マッチ あなたはモデル化します プロパティ名.
アップデート:
キーをプロパティ名に一致させる方法は?
入力IDは、入力するキーになり、IDを変更してプロパティ名と一致させるか、さらに良いことに、 htmltextboxfor ヘルパー:参照 これ 論文:
他のヒント
たぶん、フラット化されたビューモデルを作成し、それを使用してビューを入力し、後で実際のモデルと同期する必要があります。
あなたのモデルとあなたの見解を見せていただけますか、あなたがHTMLHELPERを使用していない場合、あなたはあなたのモデルでモデルの結合を動作させるために命名規則を非常によく理解する必要があります。したがって、最初の最初のことは、モデルとビューを表示することです。