2

cshtml ページに複数のフォームがあります。これらのフォームの最初のものは正しくバインドされますが、2 番目のものはバインドできませんでした。送信ボタンをクリックするたびに、渡された値はすべて 0 または null (それぞれ int と文字列) になります。

私のモデルには 2 つのオブジェクトが含まれています。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;
}

私の行動。最初のアクションは正しく機能しますが、2 番目のアクションは機能しません。

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 です。コードのソースを表示すると、DB からボックスが適切に取り込まれます。

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

構文についてさまざまなバリエーションを試しましたが、うまくいかないようです。提案、解決策、およびリソースを歓迎します。前もって感謝します。

4

1 に答える 1

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

上記のコードは即興で作成したものであり、機能させるには微調整が必​​要になる場合があることに注意してください

于 2013-04-12T20:22:01.897 に答える