2009-10-04 6 views
0

은 다음과 같은 고려 :단일 링크로 MVC에서 여러 항목을 삭제하는 방법은 무엇입니까?

부분보기 :

<%= Html.ListBox("BlackList", Model.Select(
        x => new SelectListItem 
          { 
            Text = x.Word, 
            Value = x.ID.ToString(), 
            Selected = Model.Any(y=> y.ID == x.ID) 
          }))%> 

홈페이지보기 :

<td><% Html.RenderPartial("GetBlackList", ViewData["BlackList"]); %></td> 

컨트롤러 :

 [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult DeleteWord(int[] wordIdsToDelete) 
    { 
     if (!ModelState.IsValid) 
      return View(); 
     try 
     { 
      _wordManager.DeleteWord(wordIdsToDelete); 
      return RedirectToAction("WordList"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

모델 (WordManager)

public void DeleteWord(int[] idsToDelete) 
    { 
     var dataContext = GetLinqContext(); 
     var currentList = GetTabooWordList(); 

     foreach (var id in idsToDelete) 
     { 
      foreach (var item in currentList) 
      { 
       if (item.ID == id) 
       { 
         dataContext.BadWords.DeleteOnSubmit(item); 
       } 
      } 
     } 
     dataContext.SubmitChanges(); 
    } 

문제는 정확하게 idsForDel 매개 변수를 어떻게 전달합니까? I.E 클라이언트 데이터를 서버에 전달해야합니까?

<%= Html.ActionLink("Delete Selected", "DeleteWord", "AdminWord", new { wordIds = idsForDel })%> 

jQuery로 만들 수 있다고 생각합니다. 어떤 아이디어?

답변

1

당신은 목록 에 바인딩 모델 사용하여 배열에 바인딩 할 수 있습니다 (Haacked.com Model binding to a list을, 여기 당신은뿐만 아니라 복잡한 유형을 바인딩하는 방법을 볼 수 있습니다).

내가 그래서 난 컨트롤러 액션 입력 매개 변수에 바인딩하기 위해 직렬화 수있는 요소를 생성 코드 행복하지 않다 있지만,이 코드는 당신이 원하는 바로 작동합니다

<script type="text/javascript"> 
function DeleteWords() { 
var el = $("<form></form>"); 
//for every selected item create new input element and insert it 
//inside of temporarty created form element 
var selItems = $('#BlackList option:selected').each(function(intIndex) { 

    //is important how you name input elements (as you can read in link I referenced) 
    el.append($('<input/>') 
    .attr({ type: "hidden", name: "wordIdsToDelete", value: $(this).val() }) 
    ); 
}); 

//make an ajax call with serialized temporary form 
$.ajax({ 
    type: "POST", 
    url: "/YourController/DeleteWord", 
    data: $(el).serialize(), 
    // error: HandleUnespectedError, 
    success: function(response) { 
     //handle response } 
});} 

희망이 있습니다.

1

이 코드는 어떻습니까?

<%= Html.ActionLink("Delete Selected", "DeleteWord", 
         "AdminWord", new { id="send" })%> 
    <script type="text/javascript"> 
    $(function() { 
     $("#send").click(function() { 
     $.post(
      $("form:first").attr("action"), 
      $("#GetBlackList").serialize() 
     ); 
     }); 
    }); 
    </script> 

그리고 두 개 이상의 레코드가 삭제되면 DeleteAllOnSubmit이 좋습니다.

dataContext.BadWords.DeleteAllOnSubmit(
    currentList.Where(item=>currentList.Containts(item.id)).ToList() 
); 
+0

감사합니다. 하지만 배열을 전달하려면 어떻게해야합니까? – Alexander

+0

나는 실수했다. dataContext.BadWords.DeleteAllOnSubmit ( currentList.Where (항목 => idsToDelete.Containts (item.id)). ToList() ); – takepara

관련 문제