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.