我需要在视图中为模型中的每个项目生成标签。
这是我到目前为止所做的。
Reference.cs
public class Reference
{
private string[] itemList = { "Shirt", "T-shirt", "Denim" };
public string[] Item {
get{
return itemList;
}
set {
itemList = value;
}
}
public int ShirtId{get;set;}
public int TShirtId { get; set; }
public int DenimId { get; set; }
}
index.cshtml
@model WebApplication1.Models.Reference
@{
ViewBag.Title = "Index";
}
<h2>Update Your References Here</h2>
<br>
<p> Please type in the reference code of the item in the corresponding text box</p>
<section id="reference-update">
@using (Html.BeginForm()) {
<fieldset>
<legend> Reference Items</legend>
<div class="form-horizontal">
<div class="item">
@Html.LabelFor(model=>model.Item[0])
</div>
<div class="input-lg">
@Html.TextBoxFor(model => model.ShirtId)
</div>
</div>
</fieldset>
}
</section>
但我没有得到一个名为&#34; Shirt&#34;在视图中(标签名为&#34;项目[0]&#34;出现)。我该如何解决?请注意,我是初学者。
编辑:控制器代码
public class ReferenceController : Controller
{
// GET: Reference
[Authorize]
public ActionResult Index()
{
return View("Index");
}
}
答案 0 :(得分:2)
当你看到帮助者的签名时,它不会为@Html.LabelFor()
工作:
public static MvcHtmlString LabelFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression
)
您需要一个标识属性的表达式才能显示。数组项不是可以显示的属性。
您可以将HTML更改为:
@model WebApplication1.Models.Reference
@{
ViewBag.Title = "Index";
}
<h2>Update Your References Here</h2>
<br>
<p> Please type in the reference code of the item in the corresponding text box</p>
<section id="reference-update">
@using (Html.BeginForm()) {
<fieldset>
<legend> Reference Items</legend>
<div class="form-horizontal">
@foreach(var item in Model.Item)
{
<div class="item">
<label>@item</label>
</div>
}
<div class="input-lg">
@Html.TextBoxFor(model => model.ShirtId)
</div>
</div>
</fieldset>
}
如果您只想为模型中的每个项目生成标签。
编辑:
将您的控制器代码更改为:
public class ReferenceController : Controller
{
// GET: Reference
[Authorize]
public ActionResult Index()
{
var model = new WebApplication1.Models.Reference();
return View("Index", model);
}
}
答案 1 :(得分:1)
我会以不同的方式构建您的模型,以简化此方案:
public class ItemModel
{
public int ItemId { get; set; }
public string Description { get; set; }
public string Label { get; set; }
}
public class ItemListViewModel
{
public IList<ItemModel> ItemList { get; set; }
}
现在,您的视图可以对ItemListViewModel
类型的对象进行操作,并迭代存储在其中的项目。
优于您当前的方法:
答案 2 :(得分:0)
使用@Html.Label(Model.Item[0])
<div class="item">
@Html.Label(Model.Item[0])
</div>