Передача IEnumerable или список модели в контроллер с помощью HttpPost - PullRequest
3 голосов
/ 10 августа 2011

У меня есть эта проблема:

Мои модели

public class SpesaTrasportoView
{ 
    public int SPESATRASPORTOVIEW_ID;
    public decimal PREZZO;
    public string DESCRIZIONE;
}

public class SpeseTrasportoView
{
    public List<MvcCart.Models.SpesaTrasportoView> SpeseTrasportoModello { get; set; }
    //public IList<string> Spese  { get; set; }
}

Мой взгляд

@model MvcCart.Models.SpeseTrasportoView
@{
    ViewBag.Title = "Spese Trasporto";
    int counter = 0;
}

<div class="form-content">
<h2>Spese Trasporto</h2>
<p>
   Modifica e gestisci gli importi delle spese di trasporto.     
</p>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {

    <div class="data-content">
        <fieldset>
            <legend>Informazione Spese Trasporto</legend>
            @for (int i = 0; i < Model.SpeseTrasportoModello.Count; i++)
            {
                 <div class="editor-field">
                    @Html.TextBoxFor(m => m.SpeseTrasportoModello.ToList()[i].PREZZO)
                 </div>
            }


            <p>
               <input type="hidden" value="@ViewBag.FormStatus" id="Action" name="Action"/>
               <input type="submit" value="Salva" id="Salva" name="Salva"/>
            </p>
        </fieldset>
    </div>
}

</div>

Мой контроллер

[HttpPost]
public ActionResult SpeseTrasporto(SpeseTrasportoView model)
{
    //model.SpeseTrasportoModello is ever NULL :(((((
    return View();
}

Когда я отправляю модель .SpeseTrasportoModello имеет значение null! почему mvc3 не связывает данные ????

1 Ответ

6 голосов
/ 10 августа 2011

Есть несколько вещей, которые нужно исправить. Сначала для ваших моделей сделайте все свойства. Не используйте поля.

Модель:

public class SpesaTrasportoView
{
    public int SPESATRASPORTOVIEW_ID { get; set; }
    public decimal PREZZO { get; set; }
    public string DESCRIZIONE { get; set; }
}

public class SpeseTrasportoView
{
    public List<SpesaTrasportoView> SpeseTrasportoModello { get; set; }
}

Теперь измените цикл for в представлении так, чтобы он выглядел следующим образом:

@for (int i = 0; i < Model.SpeseTrasportoModello.Count; i++)
{
    var item = Model.SpeseTrasportoModello[i];

    <div class="editor-field">
        <input type="text" 
               name="SpeseTrasportoModello[@i].PREZZO" 
               value="@item.PREZZO" />
    </div>
}

Ключевым моментом, который вам нужно знать, является формат входного имени. В нем должно быть имя свойства, которое находится внутри вашей модели (вашего списка) с индексом в квадратных скобках, а затем имя свойства, для которого предназначен этот ввод (например, PREZZO).

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