2010-08-23 4 views
1

내 asp.net MVC2 응용 프로그램에서 Html.Grid를 사용하고 있습니다.행 당 확인란이 포함 된 Html.Grid

그리드에는 행마다 확인란이 있습니다.

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

확인 된 레코드를 반복하여 작업해야합니다. 어떻게하면 단추를 클릭 할 때 포스트 백을 할 때 확인 된 id 값을 검색 할 수 있습니까?

감사합니다 :)

답변

0

나는이 더 많거나 적은 같은 그리드 코드와 함께 작업했다.

I 너의 자세히 이하 동일한 정의 선택란 컬럼 :

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

모눈 형태로 싸여있다.

양식이 다음 방법으로 다시 게시됩니다.

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

"선택"확인란이있는 경우 매개 변수 이름도 선택이 될 것입니다.

1

맞춤형 ModelBinder를 살펴볼 수 있습니다.

나는 그리드를 사용하고 난 다음과 같습니다 확인란 열이 : 당신은 그냥 필요

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

:

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

다시 게시 처리 할 수있는 컨트롤러의 내 작업 서명이입니다 IModelBinder을 구현하는 클래스 이 사용

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 컬렉션 자체를 통해 반복의 항목의 목록을 하는가에 집중할 수 있습니다 다음 BindModel 방법 당신은 이런 식으로 뭔가를 할 수 있습니다.