おはようございます私はドロップダウンリストの値の検証に関する質問があります。 ReservationData
というビューモデルタイプにバインドされたビューがあります。ASP.NET MVC 3 - 検証の質問
このオブジェクトには、タイプList<VehicleData>
のCustomerVehicles
というプロパティが含まれています。 VehicleData
は、2つのint
プロパティVehicleMakeId
とVehicleModelId
を持っています。
私はCustomerVehicles
コレクション内のアイテムの数をループし、それぞれに2つのドロップダウンを表示しようとしています。車両のドロップダウンとDropDownListFor
を使用した車両モデルのドロップダウンを表示しています。
私が送信して検証しようとすると、画面に表示される検証エラーは表示されません。
私はValidationMessageFor
を各ドロップダウンリストに追加していますか?私はこれが私のビューモデルの構造とその複雑さと、コントロールの名前付けの必要性やIDの設定方法に問題があるかどうかはわかりません。どんな助けでも大歓迎です。
コレクションをループ用のコードです:
@for (var i = 0; i < Model.CustomerVehicles.Count(); i++)
{
var vehicleNumber = i + 1;
<div class="vehicle-selection-wrapper">
<div class="content-container">
<h3>
Vehicle @vehicleNumber</h3>
<img class="vehicle-image" alt="manufacturer image" src="@Url.Content("~/Content/images/default-vehicle.gif")" /><br />
@Html.LabelFor(m => m.CustomerVehicles[i].VehicleMakeId)
@Html.DropDownListFor(m => m.CustomerVehicles[i].VehicleMakeId
, new SelectList(Model.VehicleMakes, "Id", "Name")
, @UIDisplay.Dropdown_DefaultOption, new { @class = "long-field" })<br />
@Html.ValidationMessageFor(m => m.CustomerVehicles[i].VehicleMakeId)<br />
@Html.LabelFor(m => m.CustomerVehicles[i].VehicleModelId)
@Html.DropDownListFor(m => m.CustomerVehicles[i].VehicleModelId
, new SelectList(new List<CWR.Domain.VehicleModel>(), "Id", "Name")
, @UIDisplay.Dropdown_DefaultOption, new { @class = "long-field" })
@Html.ValidationMessageFor(m => m.CustomerVehicles[i].VehicleModelId)
</div>
</div>
}
[OK]をので、私はまた、生成されたHTMLで生成された選択は、要素に関連付けられているHTML5データ-valの属性が欠落していることに気づきました検証を処理する。ここで生成されたHTMLに私VehicleData
クラスでさらに
<select class="long-field" id="CustomerVehicles_0__VehicleMakeId" name="CustomerVehicles[0].VehicleMakeId"><option value="">-- Select --</option>
</select><br />
<span class="field-validation-valid" data-valmsg- for="CustomerVehicles[0].VehicleMakeId" data-valmsg-replace="true"></span><br />
<label for="CustomerVehicles_0__VehicleModelId">Model</label>
<select class="long-field" id="CustomerVehicles_0__VehicleModelId" name="CustomerVehicles[0].VehicleModelId"><option value="">-- Select --</option>
</select>
<span class="field-validation-valid" data-valmsg-for="CustomerVehicles[0].VehicleModelId" data-valmsg-replace="true"></span>
はVehicleMakeId
とVehicleModelId
プロパティはRequired
属性で装飾されています。
UPDATE:
[OK]をので、私はテストし、私はその後、Html.TextboxFor
呼び出し検証作品とHtml.DropdownListFor
通話を入れ替える以外の同一の私のコードを続ければことに気づきました。これを引き起こす原因は何ですか?それは邪魔にならない検証のフレームワークのバグでしょうか?
UPDATEは:
を修正含まれるようASP.NET Forumsにこの同じ質問を投稿した後、私は解決策を得ることができました。この記事では、控えめな検証フレームワークにバグがあり、ドロップダウンリストの検証をどのように処理するかを確認することができます。この問題を回避する上で、あるいは少なくともMicrosoftがフレームワークに修正を加えるまで、他の人がこの問題を回避するのに役立つ解決策(サンプルコードを含む)と同様に、問題を説明するうえで、ユーザーカウンセリングはうまく機能します。
ご協力いただきありがとうございます。
あなたは、ビュー内で、このカスタムヘルパーを使用する方法の例を持っていますか?ありがとう。 – Brandon