我有一个极其简单的视图模型。
public class TellAFriendViewModel
{
public string Email1 { get; set; }
public string Email2 { get; set; }
public string Email3 { get; set; }
public string Email4 { get; set; }
public string Email5 { get; set; }
}然后在我的视图上输入相应的输入,但我想知道是否有更好的方法(例如循环)来编写类似于我的视图的TextBoxes:
@using (Html.BeginForm()){
@Html.AntiForgeryToken()
@Html.TextBoxFor(vm => vm.Email1)
@Html.TextBoxFor(vm => vm.Email2)
@Html.TextBoxFor(vm => vm.Email3)
@Html.TextBoxFor(vm => vm.Email4)
@Html.TextBoxFor(vm => vm.Email5)
}发布于 2012-03-29 07:12:26
您应该访问
ViewData.ModelMetadata.Properties。没有理由加倍反射的努力,而且它会为你找出DataAttributes元数据。
@foreach(var property in ViewData.ModelMetadata.Properties)
{
<div class="editor-line">
<label>@(property.DisplayName??property.PropertyName)</label>
@Html.Editor(property.PropertyName)
</div>
}发布于 2012-03-29 07:07:53
您应该考虑使用数组。
然而,如果你想使用反射,,,它会是这样的:
@foreach (var prop in Model.GetType().GetProperties())
{
@(Html.TextBox(prop.Name, prop.GetValue(Model, null)))
}发布于 2012-03-29 13:55:23
除非我遗漏了什么,否则我不知道为什么没有人建议这样做。为什么每个人都在循环和/或使用反射?
public class TellAFriendViewModel
{
public ICollection<EmailViewModel> Emails { get; set; } // populate 5 of them in ctor or controller
}
public class EmailViewModel
{
public string Email { get; set; }
}视图:
@using (Html.BeginForm()){
@Html.AntiForgeryToken()
@Html.EditorFor(model => model.Emails)
}EditorTemplates\EmailViewModel.cshtml
@Html.TextBoxFor(model => model.Email)在MVC中从来不需要循环。我重复一遍。绝不可能
https://stackoverflow.com/questions/9916870
复制相似问题