2013-04-12 2 views
2

У меня есть несколько форм на странице cshtml. Первая из этих форм правильно связывается, но мне не удалось получить вторую привязку. Каждый раз, когда я нажимаю кнопку отправки, все переданные значения равны 0 или null (int и stings соответственно)привязка модели и sumbit button mvc4

Моя модель содержит два объекта. AccountInfo и список AccountSettings:

public class AccountDetailViewRequest 
{ 
    public Account AccountInfo { get; set; } 
    public List<AccountSettings> Settings { get; set; } 
} 

public class AccountSettings 
{ 
    public int AccountID; 
    public string Name; 
    public string Value; 
    public int ID; 
} 

Мои действия. Первое действие, которое работает правильно, а второе - нет.

public ActionResult UpdateAccountDetails(Account model) 
{...} 

public ActionResult DeleteSetting(AccountSettings model) 
{...} 

В моей странице cshtml У меня есть этот блок, который работает правильно

@using (Html.BeginForm("UpdateAccountDetails", "Account")) 
{ 
    <input type = "hidden" name = "AccountInfo.AcctID" value = @Model.AccountInfo.AcctID /> 
    <table> 
     <tr> 
      <td>Company @Html.TextBox("AccountInfo.Company")</td> 
      <--More text boxes here--> 
     </tr> 
     <tr> 
      <td><input name="Save" type="submit" value="Save Changes"/></td> 
     </tr> 
    </table> 
} 

Позже на странице у меня есть этот блок. Когда я использую связанную кнопку отправки, вызывается функция, но все параметры равны 0 или null независимо от содержимого текстовых полей. Ящики заполняются должным образом из моей БД, когда я просматриваю исходный код.

@for (int index = 0; index < Model.Settings.Count; index++) 
{ 
    var setting = Model.Settings[index]; 
    using (Html.BeginForm("DeleteSetting", "Account")) 
    { 
     <tr> 
      <td>@Html.TextBox("Name", @Model.Settings[index].Name)</td> 
      <td>@Html.TextBox("Value", setting.Value)</td> 
      @Html.Hidden("ID", setting.ID) 
      @Html.Hidden("AccountID", Model.AccountInfo.AcctID) 
      <td><input type="submit" value="Delete"/></td> 
     </tr> 
    } 
} 

Я пробовал несколько различных вариантов синтаксиса, но, похоже, не может быть прав. Предложения, решения и ресурсы приветствуются. Спасибо заранее.

ответ

1

Try что-то вроде этого

<tr> 
     <td>@Html.TextBox("AccountSettings.Name", @Model.Settings[index].Name)</td> 
     <td>@Html.TextBox("AccountSettings.Value", setting.Value)</td> 
     @Html.Hidden("AccountSettings.ID", setting.ID) 
     @Html.Hidden("AccountSettings.AccountID", Model.AccountInfo.AcctID) 
     <td><input type="submit" value="Delete"/></td> 
    </tr> 

Вашей модели представления является AccountDetailViewRequest из которых Name, Value и т.д. не являются свойствами.

Было бы аккуратнее, если вы сделали что-то вроде этого:

@foreach (var setting in Model.Settings) 
{ 
    using (Html.BeginForm("DeleteSetting", "Account")) 
    { 
     <tr> 
      <td>@Html.TextBoxFor(m => setting.Name)</td> 
      <td>@Html.TextBoxFor(m => setting.Value)</td> 
      @Html.HiddenFor(m => setting.ID) 
      @Html.HiddenFor(m => setting.AcctID) 
      <td><input type="submit" value="Delete"/></td> 
     </tr> 
    } 
} 

Обратите внимание, что я импровизированный приведенный выше код, и вы, возможно, потребуется настроить его для работы

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