模型绑定和提交按钮mvc 4

时间:2013-04-12 16:21:47

标签: data-binding razor asp.net-mvc-4

我在cshtml页面上有多个表单。这些形式中的第一个正确绑定,但我无法让第二个绑定。每次单击提交按钮时,传递的值都是0或null(分别为int和stings)

我的模型包含两个对象。 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 个答案:

答案 0 :(得分:1)

尝试这样的事情

    <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>
    }
}

请注意,我即兴创作了上述代码,您可能需要调整它才能正常工作