我有一个包含2个属性的模型:string
和IEnumerable<SomeModel>
。如果我为UiHint
指定string
的editortemplate,则会应用它。但是当我为IEnumerable<SomeModel>
属性指定它时,没有任何反应。我需要为IEnumerable做些什么特别的事情吗?
答案 0 :(得分:0)
如果我正确理解您的问题,您需要将IEnumerable
替换为IList
,然后使用以下方法:
public class OrderDTO
{
...
public IList<OrderLineDTO> Lines { get; set; }
...
}
public class OrderLineDTO
{
public int ProductID { get; set; }
...
[Range(0, 1000)]
public int Quantity { get; set; }
...
}
...
@for (int i = 0; i < Model.Lines.Count; ++i)
{
...
@Html.EditorFor(x => x.Lines[i].Quantity)
...
}
...
适用于MVC 4.
答案 1 :(得分:0)
您的HintTemplate模型应为IEnumerable<SomeModel>
(您将在编辑器模板中迭代模型)。或者,您可以在集合属性上使用EditorFor而不是UIHint注释(在这种情况下,EditorTemplate模型将是SomeModel;视图语法中不涉及迭代)。我已经提供了类似的回复in this post
如果您的模型看起来像
public class TestModel
{
public string ParentName { get; set; }
[UIHint("HintTemplate")]
public IEnumerable<TestChildModel> children { get; set; }
}
ChildModel
public class TestChildModel
{
public int id { get; set; }
public string ChildName { get; set; }
}
你的HintTemplate.cshtml看起来应该是
@model IEnumerable<MVC3.Models.TestChildModel>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>HintTemplate</title>
</head>
<body>
@foreach(var a in Model)
{
<div style="background-color:#4cff00">
@Html.DisplayFor(m => a.ChildName)
@Html.EditorFor(m => a.ChildName)
</div>
}
</body>
</html>
您的观点
@model MVC3.Models.TestModel
@{
ViewBag.Title = "Test";
}
<h2>Test</h2>
<div>
@Html.LabelFor(a => a.ParentName)
@Html.EditorFor(a => a.ParentName)
</div>
<div>
@Html.LabelFor(a => a.children)
@Html.EditorFor(a => a.children)
</div>