Эквивалент кода для Html.EditorFor () - PullRequest
0 голосов
/ 01 декабря 2010

Кто-нибудь знает, как можно вызвать функциональный эквивалент Html.EditorFor () из контроллера?

У меня есть стандартная таблица в моем представлении. В строках используется EditorTemplate

<table id="tableOfBar">
    <tfoot>
        <tr><td colspan="2">Some paging controls and whatnot</td></tr>
    </tfoot>
    <tbody>
        <% for (int i=0;i<Model.Rows.Count();i++)
           {
               int j = i;
        %><%: Html.EditorFor(m => m.Rows[j], "FooRowTemplate", "Rows["+j+"]", new { OtherViewDataStuff})%>
    </tbody>
</table>

Шаблон редактора представляет собой строго типизированное частичное представление, которое возвращает <tr> и дочерние элементы.

Все это прекрасно работает, но следующий шаг - добавление кнопки «Добавить строку». По ряду причин, которые здесь выходят за рамки, я хочу использовать сервер, а не чисто клиентское решение. То, что я пытаюсь сделать, это вернуть EditorTemplate как частичное представление и заставить JavaScript взять возвращенный HTML и добавить его в таблицу.

[HttpPost]
public ActionResult AddRow(FooModel model)
{
    var row = new FooRowModel();
    model.AddRow(row);
    var index = model.Rows.IndexOf(row);
    return PartialView("~/Areas/MyArea/Views/Shared/EditorTemplates/FooRowTemplate.ascx", model.Rows[index]);
}

Все, что работает нормально, за исключением именования ввода. Часть, которая отсутствует, - это префикс коллекции, который сообщает связующему модели, как собирать модель на обратной стороне. На стороне просмотра вы можете указать, что это должно быть (то есть "Rows["+j+"]" часть вызова EditorFor() выше).

Можете ли вы дать частичному виду префикс имени поля html, как в EditorFor ()? Есть мысли о том, как заставить это работать? Весь мой подход может быть совершенно неверным, это нормально. Просто скажите мне, почему. :)

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 01 декабря 2010

Я бы порекомендовал вам прочитать следующую запись в блоге , в которой подробно объясняется, как добиться того, что вы ищете.

...