在asp.net mvc视图模型中的默认值
我有这个模型:
public class SearchModel { [DefaultValue(true)] public bool IsMale { get; set; } [DefaultValue(true)] public bool IsFemale { get; set; } }
但基于我的研究和答案在这里, DefaultValueAttribute
实际上并没有设置一个默认值。 但是这些答案是从2008年开始的,当传递给视图时,是否有一个属性或更好的方法比使用私有字段将这些值设置为true?
不pipe怎么说,
@using (Html.BeginForm("Search", "Users", FormMethod.Get)) { <div> @Html.LabelFor(m => Model.IsMale) @Html.CheckBoxFor(m => Model.IsMale) <input type="submit" value="search"/> </div> }
在构造函数中设置它:
public class SearchModel { public bool IsMale { get; set; } public bool IsFemale { get; set; } public SearchModel() { IsMale = true; IsFemale = true; } }
然后将其传递给GET操作中的视图:
[HttpGet] public ActionResult Search() { return new View(new SearchModel()); }
使用以下构造函数代码为您的ViewModels
创build一个基类,这将在创build任何inheritance模型时应用DefaultValueAttributes
。
public abstract class BaseViewModel { protected BaseViewModel() { // apply any DefaultValueAttribute settings to their properties var propertyInfos = this.GetType().GetProperties(); foreach (var propertyInfo in propertyInfos) { var attributes = propertyInfo.GetCustomAttributes(typeof(DefaultValueAttribute), true); if (attributes.Any()) { var attribute = (DefaultValueAttribute) attributes[0]; propertyInfo.SetValue(this, attribute.Value, null); } } } }
并从您的ViewModelsinheritance:
public class SearchModel : BaseViewModel { [DefaultValue(true)] public bool IsMale { get; set; } [DefaultValue(true)] public bool IsFemale { get; set; } }
使用特定的值:
[Display(Name = "Date")] public DateTime EntryDate {get; set;} = DateTime.Now;//by C# v6
你会有什么? 您可能最终会从某处加载默认search和search。 默认search需要一个默认的构造函数,所以build立一个像Dismissile一样。
如果你从其他地方加载search标准,那么你应该有一些映射逻辑。
如果您需要将相同的模型发布到服务器,那么在构造函数中具有默认bool
值的解决scheme将不适合您。 假设你有以下模型:
public class SearchModel { public bool IsMale { get; set; } public SearchModel() { IsMale = true; } }
鉴于你会有这样的事情:
@Html.CheckBoxFor(n => n.IsMale)
问题是,当用户取消选中此checkbox并将其发布到服务器 – 您将最终在构造函数中设置默认值(在这种情况下是真实的)。
所以在这种情况下,我最终只是在视图上指定默认值:
@Html.CheckBoxFor(n => n.IsMale, new { @checked = "checked" })
- 使用ASP.NET会话状态服务跨应用程序共享会话
- 从ASP.Net MVC应用程序中缩小HTML输出
- 如何在由@Html助手生成的MVC中更改“data-val-number”消息validation
- 具有键“XXX”的ViewData项的types为“System.Int32”,但必须为“IEnumerable <SelectListItem>”types
- 可能从JavaScript文件访问MVC ViewBag对象?
- MVC 5种子用户和angular色
- stream利的validation与数据注释
- ASP.NET Web API:正确的方式返回401 /未授权的响应
- 尝试安全透明方法“WebMatrix.WebData.PreApplicationStartCode.Start()'