1

私は私の見解でこのコードを持っています:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"type="text/javascript"></script>

...  

    <div class="modal_label">
        @Html.LabelFor(model => model.Organization.Type)
    </div>
    <div class="modal_field">
        @Html.DropDownListFor(model => model.Organization.Type, (IEnumerable<SelectListItem>)ViewBag.TypeList, String.Empty)
        @Html.ValidationMessageFor(model => model.Organization.Type)
    </div>

@Html.DropDownFor を @Html.EditorFor に変更すると、検証が機能しますが、この場合、次の html がレンダリングされます。

 <select id="Organization_Type" name="Organization.Type" class="valid">
 ...
 </select>

これが私のモデルです:

[MetadataType(typeof(OrganizationMetaData))]
public partial class Organization
{

}

public class OrganizationMetaData
{
    [Required(ErrorMessageResourceType = typeof(CCMESResources.ResourceErrors),ErrorMessageResourceName = "ValueIsRequired")]
    public int Type { get; set; }
}

フォームが投稿されると、ModelState にエラーが発生します。手伝って頂けますか?

4

2 に答える 2

3

ビュー モデルで null 許容型を使用していることを確認します。

[Required]
public int? Type { get; set; }

あなたのモデルでは、ビューで達成しようとしているものと一貫性がないnull不可の整数を使用しているようです。

また、このフォームを POST するコントローラー アクションがビュー モデルをアクション パラメーターとして受け取ることを確認してください。

于 2012-05-01T14:36:34.580 に答える
1

モデル(またはビューモデル)で、ドロップダウンリストから値を割り当てるときに、最初に選択した値が空の文字列またはnullの場合、検証をトリガーする必要がありますが、サーバーにアクセスします。それをするために。私は、最初に投稿を行わずに、クライアント側で機能する控えめな検証を取得することに失敗しました。通常、必須値にnull許容フィールドを使用することはお勧めできません。また、null許容フィールドを使用していないため、モデルが有効かどうかを確認するときに検証を強制する必要があります。これが私のプロジェクトからの抜粋です(また、私は「最小」アノテーションにデータアノテーション拡張機能を使用しています):

モデル:

[Display(Name = "Ticket Priority")]
[Min(1, ErrorMessage = "You must select a ticket priority.")]
public int TicketPriorityID { get; set; }

意見:

<div class="editor-label">
    @Html.LabelFor(model => model.TicketPriorityID)
</div>
<div class="editor-field">
    @Html.DropDownList("TicketPriorityID", string.Empty)
    @Html.ValidationMessageFor(model => model.TicketPriorityID)
</div>

コントローラー(HttpGet):

ViewBag.TicketPriorityID = new SelectList(db.TicketPriorities.OrderBy(x => x.TicketPriorityID).ToList(), "TicketPriorityID", "Name");

コントローラー(HttpPost):

if (ModelState.IsValid)
{
    ...
}
于 2012-05-01T14:46:07.600 に答える