Почему EditorFor не отображает HTML? - PullRequest
0 голосов
/ 09 октября 2011

У меня есть следующая модель представления:

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; }
}

Когда я заполняю свою модель и пытаюсь показать MatrixRows с помощью DisplayTemplate, он ничего не показывает. Имя моего DisplayTemplate - MatrixRows.cshtml, и оно находится внутри Views / Shared / 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 ... Что я делаю не так?

Код для шаблона отображения:

@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>

Ответы [ 2 ]

5 голосов
/ 09 октября 2011

Html.DisplayFor возвращает HTML.
Вы ничего не делаете с этим HTML.

Вы, вероятно, хотите написать это на странице, написав @Html.DisplayFor(...)

2 голосов
/ 09 октября 2011

Вместо написания циклов:

@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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...