ASP.NET MVC Показать конечному пользователю, что действие было успешным - PullRequest
6 голосов
/ 05 октября 2010

Большинство примеров ASP.NET MVC, которые я видел, изображают сценарии, когда пользователь просматривает объект (или коллекцию объектов), а затем перемещается с той страницы на страницу, где отображается форма, которую пользователь заполняет.После отправки формы с хорошим вводом, пользователь перенаправляется обратно на страницу, которая показывает объект (или список), и пользователь может видеть, что их изменения были успешными.

Я столкнулся с сценарием, где естьнет ни одной страницы просмотра или списка в соответствии с бизнес-правилами.

Каковы некоторые хорошие подходы для этого сценария в ASP.NET MVC?

В старые времена с Classic ASP иASP.NET, я обработал бы ввод и затем показал бы пользователю сообщение об успешном завершении или форму с ошибками - все с той же страницы.Кажется, что это идет вразрез с лучшими практиками (SRP, отсутствие логики в представлениях и т.посетите эту страницу в любое время.Если я начну вводить логику для защиты от этого (например, tempdata), решение начнет чувствовать себя грязным.

Я мог бы перенаправить на целевую страницу, но подтверждения нет.Может быть, я мог бы положиться на систему обмена сообщениями, которая показывает конечному пользователю подтверждение, когда он возвращается на целевую страницу?

Ответы [ 2 ]

3 голосов
/ 05 октября 2010

Я использую базовый контроллер, который имеет метод ShowMessage. Этот метод получает отображаемое сообщение (или ключ ресурса, по вашему желанию) и перечисление, указывающее тип сообщения (Успех, Ошибка, Уведомление и т. Д.). Прежде чем вернуться в действие, я вызываю ShowMessage с соответствующим сообщением, например,

ShowMessage("A nice message here.", MessageType.Success);

Затем на главной странице у меня есть вызов вспомогательного метода, который отображает общее частичное представление, которое отображает сообщения в случае их наличия. Сообщения хранятся в TempData с фиксированным ключом. Вы можете использовать стили, отображаемые в Blueprint css framework , для отображения сообщений в соответствии с их типом.

Вот код:

public void ShowMessage(string message, MessageType messageType)
{
    var messageViewModel = new MessageViewModel(message, messageType);
    TempData["Message"] = messageViewModel;
 }

Частичное представление:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Models.MessageViewModel>" %>
<%var className = Model.MessageType.ToString().ToLower(); %>
<div class="<%=className%>">
    <%=Html.Encode(Model.Message)%>
</div>

Я уверен, что могут быть лучшие подходы, такие как использование фильтров, но этот подход очень полезен для меня.

1 голос
/ 05 октября 2010

вы можете поместить что-то в viewdata и на странице сделать что-то вроде

<% if (viewdata["success"] != null){%>
<script>
$("#successDialog").dialog('open');
</script>
<%}%> 

, и ваш пользователь увидит всплывающее окно, сообщающее ему об успехе http://jqueryui.com/demos/dialog/

...