ASP.NET MVC模型繫結——繫結部分欄位

jiangzhengdong發表於2013-01-20
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;


namespace Xautjzd.Models
{
    [Bind(Exclude="CollectionStationId, ContactInfo ")]       //排除一部分欄位,只繫結模型中的部分欄位
    public class ServeStation
    {
        [Key]
        [DisplayName("服務站編號")]
        public string  ServeStationId { get; set; }


        [DisplayName("服務站")]
        [Required]
        public string  ServeStationName { get; set; }


        [DisplayName("集貨點編號")]
        [Required]
        public string CollectionStationId { get; set; }


        [DisplayName("站長")]
        [Required]
        public string  ServeStationManager { get; set; }


        [DisplayName("聯絡方式")]
        [Required]
        public string  ContactInfo { get; set; }
        
        [DisplayName("鄉鎮")]
        [Required]
        public string  Town { get; set; }


        [DisplayName("總站名稱")]
        [Required]
        public string  StationName{ get; set; }


        [DisplayName("所管轄區業務經理")]
        [Required]
        public string  RegionBusinessManager { get; set; }


        [DisplayName("所管轄區總經理")]
        [Required]
        public string  StationManger { get; set; }


        [DisplayName("備註")]
        [Required]
        public string  Note { get; set; }


    }
}

Bind雖可以限制繫結的欄位,但是模型驗證卻無法通過,因為模型驗證在Submit後Action執行前完成,所以就會無法通過ModelState.IsValid驗證值判斷到底驗證是否成功。

儘管如此,我們還是可以通過ModelState["欄位名稱"]語句來判斷是否發生了錯誤,但如此做會讓ASP.NET MVC變得很不方便。

於是乎ASP.NET MVC的Controller類提供了TryUpdateModel方法來解決這個問題,eg:

if(!TryUpdateModel(serveStation))
{
       //驗證失敗
       return View();
}
db.saveChanges();
return View("Index");

注:可用ModelState.addModelError("模型欄位名","驗證失敗的錯誤資訊");來手動新增驗證失敗時的錯誤提示資訊

相關文章