2014-12-09 2 views
0

Отчет модель имеет следующее определение: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)?

+0

Ваши входные элементы должны иметь уникальный идентификатор ('id') для модели, чтобы отправлять значения обратно к контроллеру. –

+0

Научитесь использовать сильно типизированные html-помощники для рендеринга вашей разметки для модели и проверки создаваемого html-файла, в частности, для атрибута 'name' –

ответ

2

Это должно работать нормально:

<input type="hidden" value="..." name="[0].Description" /> 
<input type="hidden" value="..." name="[0].Name" /> 
<input type="hidden" value="..." name="[0].Order" /> 

<input type="hidden" value="..." name="[1].Description" /> 
<input type="hidden" value="..." name="[1].Name" /> 
<input type="hidden" value="..." name="[1].Order" /> 

.. 
.. 


<input type="hidden" value="..." name="[n].Description" /> 
<input type="hidden" value="..." name="[n].Name" /> 
<input type="hidden" value="..." name="[n].Order" /> 
+0

Спасибо, сработало! :) – Annie

+2

также, прочитайте это [статья] (http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/), чтобы понять все о привязке массива mvc –

Смежные вопросы