关于在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(); }