1

asp.net MVC2 アプリケーションで Html.Grid を使用しています。

グリッドには、行ごとにチェックボックスが含まれています。

<%= Html.Grid<MyViewModel>(Model.MyList)
        .Columns( column => {
            column.For(x => Html.CheckBox("Select", false, new { id = x.ID })).DoNotEncode();

チェックしたレコードをループして処理する必要があります。ボタンのクリックでポストバックを行うときに、チェックされた id 値を取得するにはどうすればよいですか。

ありがとう :)

4

3 に答える 3

1

カスタムModelBinderを確認することをお勧めします。

グリッドを使用していて、次のようなチェックボックス列があります。

column.For(x => Html.CheckBox(x.CatalogItemId +  "-rcvd", false)).DoNotEncode().Named("Received");

ポストバックを処理するためのコントローラーのアクションシグネチャは次のとおりです。

[HttpPost]
public virtual ActionResult Index([ModelBinder(typeof(PendingRecievedItemsBinder))]IEnumerable<ShelfMyndr.Models.Previews.PendingReceivedCatalogItem> rcvdCatalogItems)

必要なのは、を実装するクラスだけですIModelBinder。このBindModel方法では、次のようなことができます。

foreach (string key in controllerContext.HttpContext.Request.Form.AllKeys.Where(k => controllerContext.HttpContext.Request[k].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Length > 1))
        {
            if (key.EndsWith("-rcvd"))
            {
                ci.IsReceived = true;
            }

これを使用すると、コントローラーのアクションは、Formsコレクション自体を反復処理するのではなく、アイテムのリストをどのように処理するかに焦点を当てることができます。

于 2010-08-23T23:45:49.610 に答える
0

私はこれを多かれ少なかれ同じグリッドコードで動作させています。

私が定義したチェックボックスの列は、多かれ少なかれあなたのものと同じです。

column.For(x => Html.SimpleCheckBox("keys", x.Id.ToString())).DoNotEncode();

グリッドはフォームにラップされています。

フォームは次のメソッドにポストバックします。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Process(IList<int> keys) {
// do stuff with the keys
}

チェックボックス名が「選択」の場合、パラメータ名も「選択」になると思います。

于 2010-08-23T23:27:26.723 に答える