【发布时间】:2016-03-20 20:31:12
【问题描述】:
我想为一个有很多属性的实体写一个Edit.cshtml文件要编辑,所以不得不多次写如下代码:
<div class="form-group">
<label asp-for="Email" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
其实实体很多,所以要写很多Edit.cshtml文件。我想做一些简化
我想在控制器中选择实体的一些属性并使用循环在视图中显示属性。例如: 在控制器文件中:
public IActionResult Edit(string id)
{
var model = GetModel(id);
var propertyNames= new List<string>()
{
"Name",
"Email"
// add some other property names of the entity
};
ViewData["PropertyList"] = propertyNames;
return View(model);
}
在视图文件中:
@{
var propertyNames = (List<string>)ViewData["PropertyList"];
foreach (string item in propertyNames)
{
<div class="form-group">
<label asp-for="@(item)" class="col-md-2 control-label"></label>
<div class="col-md-3">
<input asp-for="@(item)" class="form-control" />
<span asp-validation-for="@(item)" class="text-danger"></span>
</div>
</div>
}
}
但它不能工作,因为它会生成错误的代码。似乎我无法为“asp-for”标签助手传递字符串值。
比如我把top的代码改成这样:
@{
string e = "Email";
<div class="form-group">
<label asp-for="@e" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="@e" class="form-control" />
<span asp-validation-for="@e" class="text-danger"></span>
</div>
</div>
}
上面的代码会生成这个:
<div class="form-group">
<label class="col-md-2 control-label" for="e">e</label>
<div class="col-md-10">
<input class="form-control" type="text" id="e" name="e" value="Email" />
<span class="text-danger field-validation-valid" data-valmsg-for="e" data-valmsg-replace="true"></span>
</div>
</div>
预期的代码是:
<div class="form-group">
<label class="col-md-2 control-label" for="Email">Email</label>
<div class="col-md-10">
<input class="form-control" type="email" data-val="true" data-val-email="Email 字段不是有效的电子邮件地址。" data-val-required="Email 字段是必需的。" id="Email" name="Email" value="" />
<span class="text-danger field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>
</div>
</div>
我该怎么办?
剃须刀可以吗?
【问题讨论】:
-
考虑添加“它生成错误代码”的样例。您的 CSHTML 看起来很合理。
-
无论如何,您都需要将输入属性从“asp-for”更改为“id”
-
@AlexeiLevenkov 我添加了一个示例。
标签: c# asp.net asp.net-mvc razor tag-helpers