2013-07-29 4 views
0

Я совершенно новичок в ASP MVC, так что извините, если я прошу что-то глупое.Обновление ModelState в ASP MVC4

ModelState не получит подтверждения. Он говорит, что venue.VenueType.Type имеет значение null. Правильно ли я это делаю? Я уже даю значение Type в контроллере (не знаю, является ли это лучшей практикой), но ModelState не распознает это.

Я читал об использовании TryUpdateModel. Это не привело к каким-либо успехам, хотя я не уверен, что я правильно их использую.

Должен ли я использовать ViewModel для этого? Какие поля я использую в этом?

Эти две модели:

public class Venue 
{ 
    [Key] 
    public int Id { get; set; } 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public virtual VenueType VenueType { get; set; } 
    public virtual ICollection<VisitInfo> VisitInfos { get; set; } 
} 

public class VenueType 
{ 
    [Key] 
    public int Id { get; set; } 
    [Required] 
    public string Type { get; set; } 
} 

создать действие для класса Место проведения:

// 
    // GET: /Venue/Create 

    public ActionResult Create() 
    { 
     ViewBag.venueTypes = new SelectList(context.VenueTypes, "Id", "Type"); 
     return View(); 
    } 

    // 
    // POST: /Venue/Create 

    [HttpPost] 
    public ActionResult Create(Venue venue) 
    { 
     venue.VenueType = context.VenueTypes.Find(venue.VenueType.Id); 

     ViewBag.venueTypes = new SelectList(context.VenueTypes, "Id", "Type"); 

     if (ModelState.IsValid) 
     { 
      context.Venues.Add(venue); 
      context.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(venue); 
    } 

И создать вид:

@model eBouncer_Web.Models.Venue 

@* This partial view defines form fields that will appear when creating and editing entities *@ 
<div class="editor-label"> 
    @Html.LabelFor(model => model.VenueType) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(model => model.VenueType.Id, (SelectList) ViewBag.venueTypes) 
</div> 

<div class="editor-label"> 
    @Html.LabelFor(model => model.Name) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Name) 
    @Html.ValidationMessageFor(model => model.Name) 
</div> 

ответ

0

Если вы пишете свои собственные валидация вам не нужен ModelState.

[HttpPost] 
    public ActionResult Create(Venue venue) 
    { 
     venue.VenueType = context.VenueTypes.Find(venue.VenueType.Id); 

     ViewBag.venueTypes = new SelectList(context.VenueTypes, "Id", "Type"); 

     if (Venue != null && Venue.Name != null)//etc.. or other validations get here... 
     { 
      context.Venues.Add(venue); 
      context.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(venue); 
    } 
+0

Таким образом, не всегда рекомендуется использовать 'ModelState'? – Vincentius

+0

Я не могу сказать, что это лучшее или худшее. Но модель принадлежит вам, поэтому вы можете самостоятельно управлять всеми проверками. –

Смежные вопросы