Форма ввода в цикле foreach возвращает пустую модель - PullRequest
0 голосов
/ 14 апреля 2011

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

Вот код в представлении

<% using (Html.BeginForm ("makeTransfer", "shareTransfer")) {%>

        <% foreach (var i in Model.Inform)//int i = 0; i < Model.Inform.Count(); i++){ %>
                <%:Html.HiddenFor(x=>i.shares, new{@value = i.shares}) %> 
              ...
                <td style = "width:20px"><%:Html.TextBoxFor(x=>i.sharesRq)%></td> cuddling
        <%} %>

    <%:Html.HiddenFor(x => x.accSrc, new { @value = Model.accSrc })%>
            <%:Html.HiddenFor(x=>x.accDst, new{ @value = Model.accDst}) %>

    Date of Transfer<%:Html.TextBoxFor(x => x.date)%>
            Transfer with benefit<%:Html.CheckBoxFor(x => x.withBenefit)%>

       <input type="submit" name="save" value="Save" /></div>
       <input type="submit" name="cancel" value="Cancel" /></div>  

<%}%>

А вот и контроллер

публичный ActionResult makeTransfer (передача vmTransfer, сохранение строки, отмена строки) {

        if (cancel != null)
            return RedirectToAction("startTransfer");

        else if (save != null)
        {

            foreach (var t in transfer.Inform)
            { ...

Моя проблема в том, что Transfer.Inform (2-я строка из последней), представляющий собой список, является пустым при отправке формы. Любая помощь, пожалуйста, как можно скорее.

1 Ответ

1 голос
/ 14 апреля 2011

Я бы рекомендовал вам использовать шаблоны редактора вместо того, чтобы писать какие-либо циклы в ваших представлениях:

<% using (Html.BeginForm("makeTransfer", "shareTransfer")) { %>
    <%= Html.EditorFor(x => x.Inform) %>
    <%= Html.HiddenFor(x => x.accSrc, new { @value = Model.accSrc }) %>
    <%= Html.HiddenFor(x => x.accDst, new { @value = Model.accDst }) %>
    Date of Transfer <%= Html.TextBoxFor(x => x.date) %>
    Transfer with benefit <%= Html.CheckBoxFor(x => x.withBenefit) %>

    <input type="submit" name="save" value="Save" /></div>
    <input type="submit" name="cancel" value="Cancel" /></div>  
<% } %>

и в соответствующем шаблоне редактора (~/Views/Shared/EditorTemplates/InformViewModel.ascx):

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.InformViewModel>" 
%>
<%= Html.HiddenFor(x => x.shares) %> 
...
<td style="width:20px">
    <%= Html.TextBoxFor(x => x.sharesRq) %>
</td>

Примечание: вам может потребоваться изменить имя шаблона редактора в зависимости от типа свойства Inform.

Шаблоны редактора позаботятся о создании правильного идентификатора и имен полей ввода, чтобы все связывалось правильно:

[HttpPost]
public ActionResult makeTransfer(vmTransfer transfer, string save, string cancel)
{
    if (cancel != null)
    {
        return RedirectToAction("startTransfer");
    }
    else if (save != null)
    {
        foreach (var t in transfer.Inform)
        {
            ...
        }
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...