1

MVC 4 アプリケーションを開発していますが、いくつか問題があります。これが私のモデルの抜粋です:

public class RegistryModel
{
    [DisplayName("Registry id")]
    public  int registryId { get; set; }

    [Required]
    [DataType(System.ComponentModel.DataAnnotations.DataType.Date)]
    [DisplayName("Reception date")]
    public  DateTime? receivedDate { get; set; }

    [Required]
    [DisplayName("Source")]
    public  Source source { get; set; }
}

ソース オブジェクト:

public class Source
{
    public virtual string sourceCode { get; set; }
    public virtual string fullName { get; set; }
    public virtual string shortName { get; set; }
    public virtual string type { get; set; }
    public virtual IList<Registry> registryList { get; set; }
}

コントローラ:

public ActionResult Create()
{
    var sourceRepo = new Repository<DTOS.Source>(MvcApplication.UnitOfWork.Session);
    IEnumerable<SelectListItem> sourcesEnum = sourceRepo.FilterBy(x=>x.type.Equals("C")).Select(c => new SelectListItem { Value = c.sourceCode, Text = c.fullName });
    ViewBag.Sources = sourcesEnum;
    return View();
}

そして最後に景色

@model Registry.Models.RegistryModel

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

<fieldset>
    <legend>New Registry</legend>      

    <div class="editor-label">
        @Html.LabelFor(model => model.source)
    </div>
    <div class="editor-field">
         @Html.DropDownListFor(Model => Model.source.sourceCode, (IEnumerable<SelectListItem>)ViewBag.Sources, String.Empty)
         @Html.ValidationMessageFor(model => model.source)
    </div>

ドロップダウン リストからソースを選択すると、正常に動作します。ただし、選択せずに送信すると、モデルで [必須] とアノテートされていても、エラー メッセージは表示されません。

コントローラー レベルで HttpPost Create をデバッグした後、返された RegistryModel のソース メンバーがインスタンス化されていることがわかりますが、そのメンバーはすべて null (sourceCode、fullName など) です。

フォームを送信する前にドロップダウン リストでソースを選択しなかった場合、MVC がモデルのソース メンバーをインスタンス化するのはなぜですか?

これでビューを変更しようとしました:

@Html.DropDownListFor(Model => **Model.source**, (IEnumerable<SelectListItem>)ViewBag.Sources, String.Empty)

今回、ソースを選択せず​​に送信するとエラーメッセージが表示されるのですが、ソースを選択すると、送信後に「送信前に選択した値のユーザーコードが無効です」という別のエラーメッセージが表示されます

どんな助けでも大歓迎です!B.

4

1 に答える 1

0

私は、モデル バインダーが Source オブジェクトを作成し、フォームを送信するときに (存在するかどうかに関係なく) その値を入力しようとすると信じています。RequiredAttribute は、あなたが薄いかもしれないように機能していません。ここを参照してください:

http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

于 2012-10-18T16:21:24.083 に答える