2014-11-14 1 views
1

У меня есть страница, которая представляет собой список пользователей. Функция индексатора контроллера - это действие, ответственное за показ страницы пользователей. Пользователь может выбрать этих пользователей и выбрать их удаление.Как сохранить этот сценарий в 1 раунде?

Выполнение действия delete с помощью запроса ajax, однако список пользователей устарел. Поэтому я перезагружаю страницу, потому что я хочу повторно использовать действие индекса, и все параметры строки запроса все еще существуют. Это означает, что я выполняю две поездки туда и обратно. Как мне избежать этого?

function DeleteUsers() 
{ 
    var selectedUserIds = ; 
    $.post("/Account/DeleteUsers", 
    { 
     userIds: selectedUserIds 
    }, 
    function (data) { 
     if(data.status == "success"){ 
      location.reload(); 
     } 
    }); 
} 

функция Index:

[AuthorizeActionFilter] 
    public ActionResult Index(UserModel model) 
    { 
     ViewData["PageTitle"] = ServiceSite.Resources.Resources.REGISTERED_USERS; 
     ViewBag.MaxUsersPerPage = PAGE_MAX_COUNT; 

     if(model == null) 
     { 
      model = new UserModel(); 
     } 

     int totalCount = 0; 

     //Get users 
     model.Users = CADC.GetUsers(AccountController.GetRegionID(), model.CompanyID, out totalCount, 
      model.SortField, model.PageNumber * PAGE_MAX_COUNT, PAGE_MAX_COUNT, model.Ascending, User.Identity.Name); 

     model.TotalUserCount = totalCount; 

     int totalPages = totalCount/PAGE_MAX_COUNT; 
     model.TotalPages = (totalCount % PAGE_MAX_COUNT) == 0 ? totalPages : totalPages + 1; 

     return View(model); 
    } 

и модель:

public class UserModel 
{ 
    public bool Ascending { get; set; } 

    public int PageNumber { get; set; } 

    public string SortField { get; set; } 

    public int TotalUserCount { get; set; } 

    public int TotalPages { get; set; } 

    public long CompanyID { get; set; } 

    public List<User> Users { get; set; } 

    public UserModel() 
    { 
     this.Ascending = true; 
     this.PageNumber = 0; 
     this.SortField = "FirstName"; 
     this.CompanyID = 0; 
     this.TotalUserCount = 0; 
     this.TotalPages = 0; 
    } 

}

+1

Вам действительно нужно повторно выбрать список после операции удаления? Когда запрос AJAX сообщает об успехе, вы не можете просто удалить эти строки из HTML через JavaScript? В чем разница между этим и повторным набором всего списка? – David

+0

Это обычная практика? На странице также есть итоговые значения на странице, которые я мог бы рассчитать, но разбиение на страницы было бы путаным. На странице «Показано от 1 до 50 из 250». Поэтому, если я удалю 10 устройств, я предполагаю, что могу обновить их до «Показывать от 1 до 40 из 240». – Dave

+1

Другой вариант может состоять в том, чтобы сама операция удаления возвращала обновленный список, а затем просто привязывала элементы страницы к этому списку. – David

ответ

0

Я согласен с @ комментарии Дэвида. В блоке успеха AJAX удалите только что удаленные строки на основе того, что вы попросили удалить.

Пагинация действительно сложнее; либо отрегулируйте его таким же образом, либо обновите все, чтобы использовать правильную модель представления в Javascript со связанными элементами - см. AngularJS или другие подобные структуры.

Смежные вопросы