1

Razor 内にこのサンプル コードがあります。

@Html.TextBoxFor(x => ((VisitGozo.Modules.Data.Events.EventSpecificFieldsData)x.Event.DataObject.SpecificFields).LinkedTourismProduct)

ご覧のとおり、式にはキャストが含まれています。TextBoxFor はExpressionHelper.GetExpressionText()、式をモデル バインド用のテキストに変換するメソッドを利用します。

上記の例では、キャストにより、返されるフィールド名は justLinkedTourismProductと notEvent.DataObject.SpecificFields.LinkedTourismProductです。キャストがなければ、フル ネームが正しく返されます。

Event.DataObject.SpecificFields.LinkedTourismProductしたがって、モデルのバインド中に、モデルのプロパティが唯一ではないため、正しいプロパティにバインドされませんLinkedTourismProduct

なぜこれが起こっているのか、他の解決策/回避策はありますか?

4

1 に答える 1

3

それは正常な動作です。厳密に型指定されたヘルパーでは、単純な式 (プロパティ アクセスとインデクサー アクセス) のみがサポートされています。キャスティングではありません。

これを行う正しい方法は、ビュー モデルに正しいタイプのプロパティを設定することです。

public EventSpecificFieldsData EventSpecificFields { get; set; }

次に、キャストなしでテキストボックスをそれにバインドします。

@Html.TextBoxFor(x => x.Event.DataObject.EventSpecificFields.LinkedTourismProduct)
于 2013-03-28T10:41:40.560 に答える