Кто-нибудь знает, как можно вызвать функциональный эквивалент 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 ()? Есть мысли о том, как заставить это работать? Весь мой подход может быть совершенно неверным, это нормально. Просто скажите мне, почему. :)
Спасибо за вашу помощь.