Как мне лучше всего справиться с остановкой удаления строки, когда существуют записи? - PullRequest
1 голос
/ 28 ноября 2011

У меня есть список записей книг, который отображается на экране MVC Razor

1  edit   delete   Harry Potter 1
2  edit   delete   Harry Potter 2
..
3  edit   delete   Harry Potter 25

Когда пользователь нажимает на ссылку [удалить], управление переходит к методу удаления на контроллер. Затем отображается экран MVC Razor, который позволяет пользователю подтвердить удалить (если нет на складе) или отменить удаление (если есть на складе).

У меня вопрос "где я должен проверить товар?", Если я должен проверить это в окне Razor со следующим утверждением:

@if (@Model.xxx.Count == 0) {
   show the user a [confirm delete] button 
}

@if (@Model.xxx.Count != 0) {
   show the user a [cancel button] and a message saying "cannot delete"
}

Кажется неуклюжим делать все это в представлении, но также контроллер не совсем подходит, и если в контроллере, то я не уверен, как его кодировать.

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Вы должны проверить запас как в представлении, так и в вашем контроллере:

  • Ваше представление должно отображать только действительные действия для пользователя, показывая ему кнопку удаления, которая не гарантирует фактическое удаление записи, основанной на неясных рассуждениях, не имеет смысла.
  • Ваш контроллер должен также проверять, разрешено ли ему выполнять действие, в противном случае доступ к вашему контроллеру может быть прямым, а ресурс все еще может быть удален.
2 голосов
/ 28 ноября 2011

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

Таким образом, вам нужно выполнить проверку Model.xxx.Count != 0 при создании списка. Однако вам все равно нужно выполнить ту же проверку в контроллере удаления, чтобы избежать воздействия на недопустимые данные (как это следует делать в любом контроллере).

...