2011-10-09 91 views
0

我有以下视图模型:为什么不编辑为呈现HTML?

public class ShowMatrixQuestionViewModel : ShowQuestionViewModel 
{ 

public Dictionary<MatrixRows, List<MatrixColumns>> columnrow; 
public List<MatrixColumns> columns; 
public List<MatrixRows> rows; 

public ShowMatrixQuestionViewModel() 
{ 
    columns = new List<MatrixColumns>(); 
    rows = new List<MatrixRows>(); 
    columnrow = new Dictionary<MatrixRows, List<MatrixColumns>>(); 
} 
} 

public class MatrixColumns 
{ 
    public int Column_ID { get; set; } 
    public int Column_Number { get; set; } 
    public String Column_Description { get; set; } 
    public Boolean IsAnswer { get; set; } 
} 

public class MatrixRows 
{ 
    public int Row_Id { get; set; } 
    public String Row_Number { get; set; } 
    public String Row_Description { get; set; } 
} 

当我填写了我的模型,并尝试用DisplayTemplate它不显示任何东西来显示MatrixRows。我DisplayTemplate的名称是MatrixRows.cshtml它放在里面查看/共享/ DisplayTemplates

这是我用来显示MatrixRow代码:

@model TestInheritance.Models.ShowMatrixQuestionViewModel 

@using (Html.BeginForm()) 
{ 
    <div id="edit"> 
    <h2>Columns</h2> 
    @foreach (var column in Model.columns) 
    { 
     <p>@column.GetType().Name</p> 
     Html.RenderPartial("EditMatrixColumn", column); 
    } 
    <h2>Rows</h2> 
    @foreach (var rows in Model.rows) 
    { 
     <p>@rows.GetType()</p> 
     Html.DisplayFor(x => rows); 
     //Html.RenderPartial("EditMatrixRow", rows); 
    } 
    </div> 

    <input type="submit" value="Finished" /> 
} 

当我使用的RenderPartial它工作正常.. 。 我究竟做错了什么?

的DisplayTemplate代码:

@model TestInheritance.Models.MatrixRows 
@using TestInheritance.Helpers 

<div class="editrow"> 
@using (Html.BeginCollectionItem("rows")) 
{ 
    <span> 
    Nummer: 
    @Html.EditorFor(cn => Model.Row_Number) 
    </span> 
    <br /> 
    <span> 
    Beskrivelse: 
    @Html.EditorFor(bs => Model.Row_Description) 
    </span> 
} 
</div> 

回答

5

Html.DisplayFor返回HTML。
你没有对HTML做任何事情。

你可能想通过写@Html.DisplayFor(...)

2

而是写来写页面循环:

@foreach (var rows in Model.rows) 
{ 
    <p>@rows.GetType()</p> 
    Html.DisplayFor(x => rows); 
} 

简单:

@Html.DisplayFor(x => x.rows) 

,然后将相应的显示模板~/Views/Shared/DisplayTemplates/MatrixRows.cshtml其内会自动呈现为集合中的每个元素:

@using TestInheritance.Helpers 
@model TestInheritance.Models.MatrixRows 

<p>@GetType()</p> 
<div class="editrow"> 
@using (Html.BeginCollectionItem("rows")) 
{ 
    <span> 
     Nummer: 
     @Html.EditorFor(x => x.Row_Number) 
    </span> 
    <br /> 
    <span> 
     Beskrivelse: 
     @Html.EditorFor(x => x.Row_Description) 
    </span> 
} 
</div> 

这就是说,您的显示模板看起来更像是一个编辑器模板,因为它包含输入字段。所以:

@Html.EditorFor(x => x.rows) 

然后用~/Views/Shared/EditorTemplates/MatrixRows.cshtml

+0

我不知道for循环的arent neccesary。 SLaKs在你面前回答,所以我必须给他提供这个观点,因为他的回答也是正确的。感谢您提供有用的提示! – Kenci