0

asp.net mvc list action (PhotoList - get)의 데이터베이스에서 이름이있는 모든 이미지를 표시 할 목록 페이지가 있습니다. 해당보기 페이지 (PhotoList.aspx) 확인란을 여러 행을 삭제하려면 만들었습니다. 다음과 같은 시나리오가 필요합니다.asp.net mvc에서 foreach를 사용하여 동적으로 생성 된 확인란

첫 번째 페이지는 첫 번째 열 확인란과 두 번째 열인 PhotoName 및 아래쪽 페이지에서 선택한 행을 삭제하는 데 사용되는 버튼이있는 목록을 보여줍니다. 확인란을 선택하고 삭제 버튼을 클릭하면 선택 항목에 따라 데이터베이스에서 행이 삭제되고 동일한 목록 페이지가 반환됩니다 ..

삭제 및 코드 작성 위치를 이해할 수 없습니까? 의 긴급 PLS 날 도와

..

<% foreach (var item in Model) { %> 
    <tr> 
     <td> 
      <input type="checkbox" name="deleteImage" value="<%= item.PhotoId %>"/> 
     </td> 
     <td> 
      <%= Html.ActionLink("Edit", "Edit", new { id=item.PhotoId }) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.PhotoName) %> 
     </td> 
    </tr> 
<% } %> 
<input type="button" name="Delete" value="Delete Selected items"/>  

답변

0

삭제에 대한 코드는 삭제를위한 HttpPost 액션에 기록됩니다. 당신이 myModel

[HttpPost] 
public ActionResult Delete(myModel deleteEntries) //This is the post-version of your Action that rendered the view..If it's Edit, then change the name to Edit 
{ 
    var deleteList = db.deleteEntries.where(d => d.checkBox == true).ToList(); 
    foreach (myList my in deleteList) 
    { 
     db.myList.Remove(my); // remember db should be your DbContext instace 
    } 
    db.SaveChanges(); 
} 

UPDATE 그렇지 않으면 당신은 체크 박스의 도움으로 삭제 검사하는 항목을 인식 할 수 있기 때문에 먼저 뷰 모델을해야합니다

를 사용하는 경우 다음과 같은 뭔가 작동합니다.

IEnumerable<MyPhotoViewModel>을 반영하고 그에 따라 적절한 변경을 할 수있는 using 문을 변경,보기에서보기

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult PhotosList() 
{ 
    var viewModel = _datamodel.tblPhoto.Select(g => new MyPhotoViewModel 
            { 
             TablePhoto = g; 
             checkBox = false; 
            }).ToList();  
    return View(viewModel); 
} 

using pratice3.Models; 
public class MyPhotoViewModel 
{ 
    public UserManagementDbEntities.tblPhoto TablePhoto { get; set; } 
    public bool checkBox { get; set; } 
} 

반환이 다음과 같은 뷰 모드 클래스를 확인합니다.

그런 다음, 당신이 할 수있는 jQuery를 사용

[HttpPost] 
public ActionResult PhotosList(IEnumerable<MyPhotoViewModel> myPhotoList) 
{ 
    var deleteList = myPhotoList.where(d => d.checkBox == true).ToList(); 
    foreach (var deletePhoto in deleteList) 
    { 
     _datamodel.tblPhoto.DeleteObject(deletePhoto.TablePhoto); 
    } 
    db.SaveChanges(); 
} 
+0

"myModel"이란 무엇입니까? 그리고 db ...? – lakhani

+0

나는 usermanagementEntitites를 모델 엔티티로, _datamodel을 그 객체로, tblPhoto를 테이블로 사용한다. 어떻게 할 수 있는가? – lakhani

+0

"myModel", "myList"및 "db"가 ​​정확히 무엇인지 알 수 있습니까? – lakhani

0

를 다음과 같이 당신의 포스트 액션을 정의합니다. 버튼 클릭에

은, 사진의 모든 IDS, 버튼 클릭에 지금이

var selected = new Array(); 
    $('name="deleteImage" input:checked').each(function() { 
     selected.push($(this).attr('id'))); 
    }); 
    var selectedIds = selected.join(','); 

뭔가를 얻을이 ID를 받아 들일 것입니다 및 DB 정도에서 삭제됩니다 서버 측면에서 기능에 아약스 전화를 걸 .

$.ajax({ 
    url: '@Url.Action("DeleteRecord", "UserManage")', 
    data: 'ids=' + selectedIds + '&time=' + new Date(), //Date makes each call unique 
    success: function (data) { 
     //You can reload page 
    }, 
    error: function (data) { 
     //You can show error 
    } 
}); 

희망이 있습니다.

+0

에서 selectedIds에 쉼표로 구분 된 목록으로 선택된 모든 ID가 수신됩니까? 그리고 아약스 caling insted 컨트롤러의 모든 작업에이 문자열을 전달할 수 있습니다 ..? – lakhani

+0

예, 쉼표로 구분 된 문자열이 표시됩니다. 그리고 액션 컨트롤러에 데이터를 게시하려면 모델을 만들어야합니다. 그렇지 않으면 요청을 받기가 매우 쉽습니다. UserManageController에 쉼표로 구분 된 문자열을 허용하는 DeleteRecord 함수가 있다고 가정하고 업데이트 된 코드입니다. –

관련 문제