динамически созданный флажок с использованием foreach в asp.net mvc - PullRequest
0 голосов
/ 11 января 2012

У меня есть страница списка для отображения всех изображений со своим именем из базы данных в действии списка asp.net mvc (PhotoList - get) .. на этой странице просмотра (PhotoList.aspx) я создал флажок для удаления нескольких строк. Я хочу сценарий, подобный следующему

на первой странице отображается список с флажком в первом столбце, во втором столбце PhotoName и на нижней странице одной кнопкой для удаления выбранных строк. если установить флажки и щелкнуть кнопку удаления, в соответствии с выбором строки будут удалены из базы данных и вернутся на ту же страницу списка.

Я не понимаю, где написать код для удаления и как?

его срочно, пожалуйста, помогите мне ..

<% 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"/>      

Ответы [ 2 ]

0 голосов
/ 11 января 2012

Используя jQuery, вы можете сделать это.

При нажатии кнопки получить все идентификаторы фотографий, что-то вроде этого

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

Теперь нажмите кнопку, сделайте 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 голосов
/ 11 января 2012

Код для удаления будет записан в действии 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();
}

ОБНОВЛЕНИЕ

Сначала вам нужно будет сделать ViewModel, потому что в противном случае вы не можете распознать, какие записи являютсяпроверено на удаление с помощью флажка.

Создайте класс ViewMode, подобный следующему

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

Верните это в ваше представление

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

В View измените использованиезаявление для отражения IEnumerable<MyPhotoViewModel> и внесения соответствующих изменений соответственно.

Затем определите свое почтовое действие следующим образом

[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();
}
...