關於在MVC中view中設置默認值,可以象如下設置:
1、關於VIEWMODEL的部分
如果是C# 6.0,網上資料查到說可以
public int X { get; set; } = 100
如果語法不支持,只能改回.net 2.0的寫法。
public class UserType { private int _UserType = 1; public int UserTypeID { get { return this._UserType; } set { this._UserType = value; } } }
需要糾正一下的是,在屬性上通過Attribute加[DefaultValue()]的方法是無效的。
//無效
[DefaultValue(1)] public int UserTypeID { get; set; }
2、關於Controller部分
如果想在View中獲取設置的默認值,那么我們需要返回一個new type()。
public ActionResult Create() { ViewBag.MaxOrder = userTypeRepository.MaxOrder(); return View(new UserType()); }
這樣通過查看HTML源代碼,可以得到正確結果。
<input data-val="true" data-val-number="字段 UserTypeID 必須是一個數字。" data-val-required="UserTypeID 字段是必需的。" id="UserTypeID" name="UserTypeID" type="hidden" value="11" />
如果不new一個對象,是不能得到默認值的。
附注:
如果我們不對屬性設置默認值,MVC會幫我們自動填充默認值。如下:
//ViewModel部分 public int UserTypeID { get; set; } //Controller部分 ViewBag.MaxOrder = userTypeRepository.MaxOrder(); return View(new UserType()); //查看HTML,MVC自動將int設為了0 <input data-val="true" data-val-number="字段 UserTypeID 必須是一個數字。" data-val-required="UserTypeID 字段是必需的。" id="UserTypeID" name="UserTypeID" type="hidden" value="0" />
所以我們實際可以這樣使用:
VIEWMODEL
public class UserType { public int UserTypeID { get; set; } [Required(ErrorMessage = "請輸入用戶類型名稱")] public string TypeName { get; set; } [Required(ErrorMessage = "請輸入用戶類型排序")] [Range(-100, 100, ErrorMessage = "請輸入正確的排序")] public int TypeOrder { get; set; } }
Controller
public ActionResult Create() { ViewBag.MaxOrder = userTypeRepository.MaxOrder(); return View(); }
Save
public void SaveData(UserType UserType) { met_UserType model = UserType.MapTo<met_UserType>(); if (UserType.UserTypeID == 0) { db.Entry<met_UserType>(model).State = EntityState.Added; LogRepository.Add(string.Format("添加了用戶類型:{0}", UserType.TypeName)); } else { db.Entry<met_UserType>(model).State = EntityState.Modified; LogRepository.Add(string.Format("編輯了用戶類型:{0}", UserType.TypeName)); } db.SaveChanges(); }