Отчет модель имеет следующее определение:Bind сырой разметки MVC параметр действия
public class Report
{
public int Id { get; set; }
public string Name { get; set; }
public int Order { get; set; }
public string Description { get; set; }
}
Теперь, есть код JavaScript/JQuery, который генерирует следующую разметку и добавить его в форму (по представить) :
<input type="hidden" value="..." name="Description[0]" />
<input type="hidden" value="..." name="Name[0]" />
<input type="hidden" value="..." name="Order[0]" />
<input type="hidden" value="..." name="Description[1]" />
<input type="hidden" value="..." name="Name[1]" />
<input type="hidden" value="..." name="Order[1]" />
..
..
<input type="hidden" value="..." name="Description[n]" />
<input type="hidden" value="..." name="Name[n]" />
<input type="hidden" value="..." name="Order[n]" />
Мои действия выглядит следующим образом:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Reports(IEnumerable<Report> reports)
{
// reports is null, even if I change the param type to: Report[] reports
}
Я не хочу, чтобы создать отдельную ViewModel для этого, просто нужно изменить необработанную разметку, чтобы она сопоставлялась с параметром.
Также попытался изменить разметку name="Reports[0].Order"
, name="Reports[0].Name"
и т. Д., Но значения не являются обязательными для параметра действия.
Есть ли способ изменить разметку и сделать работу привязки таким образом, что нам не нужно что-либо менять в коде контроллера (имитируя разметку точно, как была бы создана Razor)?
Ваши входные элементы должны иметь уникальный идентификатор ('id') для модели, чтобы отправлять значения обратно к контроллеру. –
Научитесь использовать сильно типизированные html-помощники для рендеринга вашей разметки для модели и проверки создаваемого html-файла, в частности, для атрибута 'name' –