我为什么要用LabelFor
而不是<label>
?
例如.
@Html.LabelFor(model => model.FirstName)
@Html.DisplayFor(model => model.FirstName)
Run Code Online (Sandbox Code Playgroud)
VS
<label for="FirstName">First Name</label>
@Html.DisplayFor(model => model.FirstName)
Run Code Online (Sandbox Code Playgroud)
除此之外,@ pswg已涵盖此问题的DRY方面.我还想知道它是否有助于本地化.即.基于当前语言设置的不同标签.
在Visual Studio中,菜单命令"Build"=>"转换所有T4模板"是做什么的?
我有两个实体:
public class ParentThing
{
[Key]
public int Id { get; set; }
[Required]
public ChildThing TheFirstThing { get; set; }
public ChildThing TheSecondThing { get; set; }
}
public class ChildThing
{
[Key]
public int Id { get; set; }
[Required]
public string Code { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和视图模型:
public class ParentViewModel
{
public string Message { get; set; }
public ParentThing ParentThing { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和一个观点:
@using (@Html.BeginForm()) …
Run Code Online (Sandbox Code Playgroud) 我被告知Asp.Net MVC中的DRY负责人非常重要.我也被告知,坚持这一点的部分不是在可能的情况下在ViewModel中重复实体属性属性,例如[Required]和[Display(Name ="Shuttle Name")].
我也被告知数据,业务和表示层之间的分离很重要.所以我想知道为什么像[Display]这样的属性在我的ProjectName.Entity项目中的实体上.我喜欢数据层没有表达层存在的气息的想法.我个人更喜欢在我的数据层中没有显示信息,并且没有数据实体直接映射到我的表示层中的控件.
例如.使用一个简单的ViewModel,它包含需要显示或编辑的任何属性的私有Shuttle实体属性和公共属性:
private readonly Shuttle shuttle;
public ShuttleViewModel() { this.shuttle = new Shuttle(); }
public ShuttleViewModel(Shuttle shuttle)
{
this.shuttle = shuttle;
}
[Required]
[Display(Name = "Shuttle Name")]
public string ShuttleName
{
get { return this.shuttle.Name; }
set { shuttle.Name = value; }
}
Run Code Online (Sandbox Code Playgroud)
我意识到这可能是ViewModel中已经存在于Entity类中的重复属性并手动映射数据但是根据经验我发现它每次都有效.我还看到当复杂实体被超级映射到ViewModel时抛出的一些可怕的非直观异常.所以我会喜欢关于DRY和WET的一些反馈.