2013-07-29 73 views
0

我對ASP MVC完全陌生,所以對不起,如果我問一些愚蠢的東西。更新ASP MVC4中的模型狀態

ModelState不會被驗證。它說venue.VenueType.Type爲空。我做對了嗎? 我已經給控制器中的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

我不能說最好或最差..但模型是你的,所以你可以管理所有的驗證我自己想的.. –