2012-07-14 97 views
0

我有一個模型有2個屬性:stringIEnumerable<SomeModel>。如果我通過UiHintstring指定了editortemplate,則會應用它。但是當我指定它爲IEnumerable<SomeModel>屬性時,沒有任何反應。 IEnumerable有什麼特別之處嗎?IEnumerable的ASP.NET MVC EditorTemplate

+0

無法編輯一般的IEnumerable !如果您對實際屬性一無所知,您將使用什麼樣的控制? – 2012-07-14 20:44:27

+0

@RicardoPeres,我知道SomeModel屬性 – SiberianGuy 2012-07-14 20:46:27

回答

0

如果我正確理解你的問題,你需要你的IEnumerableIList來代替,然後用下面的辦法:

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

0

你HintTemplate模式應該是IEnumerable<SomeModel>(你將在編輯器模板中迭代模型)。或者,也可以不使用UIHint批註,而是使用集合屬性上的EditorFor(在這種情況下,EditorTemplate模型將爲SomeModel;視圖語法中不包含迭代)。我如果你的模型看起來像

public class TestModel 
{ 
    public string ParentName { get; set; } 
    [UIHint("HintTemplate")] 
    public IEnumerable<TestChildModel> children { get; set; } 
} 

ChildModel

提供了類似的答覆 in this post

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> 
相關問題