0

私はasp.net mvc list action(PhotoList - get)のデータベースからその名前を持つすべてのイメージを表示するリストページを持っています。そのビューページ(PhotoList.aspx)私は、複数の行を削除するチェックボックスを作成しました。次のようなシナリオが必要ですasp.net mvcでforeachを使用して動的に作成されたチェックボックス

最初のページでは、最初の列のチェックボックスと2番目の列のPhotoNameおよび選択された行を削除するための1ページの下のページにリストが表示されます。 チェックボックスをオンにして削除ボタンをクリックすると、選択された行がデータベースから削除され、同じリストページが返されます。

削除するコードはどこに書くのか分かりません。

その緊急の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アクションに書き込まれます。あなたがそうでなければ、チェックボックスの助けを借りて、削除のためにチェックされるエントリは認識できないので、あなたが最初のViewModelを行う必要があります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

を使用している場合は、以下のようなものが動作するはずです。

ビュービューで

[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; } 
} 

戻り、これを次のようにビューモードのクラスを作成し、IEnumerable<MyPhotoViewModel>を反映し、それに応じて適切な変更を行うために使用してステートメントを変更します。

次に、あなたがこれを行うことができます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

を、以下のようなあなたのポストのアクションを定義します。ボタンのクリックで

は、写真のすべてのID、ボタンをクリックしたときに、今、この

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

のようなものを取得し、これらのIDを受け入れますし、DBかそこらから削除するサーバー側の一部の機能にAjaxの呼び出しを行います。

$.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がカンマ区切りリストで表示されますか?私はコントローラの任意のアクションにこの文字列を渡すことができますか? – lakhani

+0

はい、カンマで区切られた文字列が得られます。アクションコントローラーにデータを投稿するには、モデルを作成する必要があります。そうしないと、リクエストを行うのが非常に簡単です。 UserManageControllerでコンマ区切り文字列を受け入れるDeleteRecord関数があると仮定して、コードを更新しました。 –

関連する問題