关于在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 字段是必需的。" />
如果不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 字段是必需的。" />
所以我们实际可以这样使用:
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();
}
|
请发表评论