0

私はmvcに非常に慣れていませんが、次のようなオブジェクトを含むビューモデルを持っているとは言えません

public class vm_set_rol
{
    public IEnumerable<SelectListItem> roles { get; set; }
    public Rol_User rol { get; set; }

}

ロールは次のようなオブジェクトです。

public class Rol_User
{
    public int idUser { get; set; }
    public int Role { get; set; }
    public int GrantedBy { get; set; }
    public bool canGrant { get; set; }
    public DateTime ExpirationDate { get; set; }
}

だから私は、ユーザーが役割のドロップダウンから1つの役割を選択し、日付とチェックボックスを次のように選択できるようにするフォームをビューに持っています:

      <div class="ModalContainer">
        @using (Ajax.BeginForm(new AjaxOptions
                                        {
                                            UpdateTargetId = "gestionRolContainer",
                                            Url = "Permiso/Test",                                               
                                            InsertionMode = InsertionMode.Replace,
                                            HttpMethod = "POST",



                                        }
                                )
                )
        { 
            <fieldset>
                    <legend>@Res_String.RolLabel</legend>

                    <span>ROL:</span><br />@Html.DropDownListFor(m => m.rol, Model.roles, new {@id="AdmPermUserRolesDropDown" })
                    <br />

                    @Html.CheckBoxFor(m => m.rol.conceder ,Model.rol.conceder) <span>Delegate?</span>
                    <br />

                    <input type="submit" class="buttonClass" value="OK" />
            </fieldset>


        }
</div>

問題は、null 値しか取得できないことです。モデルに文字列や int などの他のプロパティを作成すると、それらは問題なくポストバックされます。

オブジェクトがポストバックされない理由がなんとなくわかりました。回避策はありますか??? または、モードにオブジェクトを置くのは間違っているので、オブジェクトではなくビューモデルでプロパティを宣言する必要がありますか???

4

1 に答える 1

1

ドロップダウンが正しくバインドされていません。選択した値を保持するには、スカラー プロパティにバインドする必要があります。

@Html.DropDownListFor(
    m => m.rol.Role, 
    Model.roles, 
    new { id = "AdmPermUserRolesDropDown" }
)

Roles コレクション プロパティに関する限り、フォームの送信時にこのリストがサーバーに送信されないため、コントローラー アクションでは常に null になります。選択した値のみが送信されます。したがって、このビューをもう一度再表示する必要がある場合は、GET アクションで行ったのと同じ方法で、HttpPost アクションに Roles コレクション プロパティを設定する必要があります。

m => m.rol.concederまた、チェックボックスは、表示したビューモデルに存在しないプロパティにバインドされています。canGrantブール値のプロパティを使用するつもりだったと思います。また、CheckBoxFor ヘルパーの 2 番目のパラメーターとして値を指定する必要はありません。これは、ラムダ式から推測されます。

@Html.CheckBoxFor(m => m.rol.canGrant) <span>Delegate?</span>

最後になりましたが、使用しているため、ビューでスクリプトAjax.BeginFormを参照していることを確認してください。jquery.unobtrusive-ajax.js

于 2013-07-17T12:03:03.730 に答える