ASP.NET MVC向最终用户显示操作成功

时间:2010-10-05 13:29:06

标签: asp.net-mvc views single-responsibility-principle

我见过的大多数ASP.NET MVC示例都描述了用户正在查看对象(或对象集合)然后从该页面移动到显示用户完成的表单的情况。提交具有良好输入的表单后,用户将被重定向回显示对象(或列表)的页面,用户可以看到他们的更改成功。

我遇到了每个业务规则都没有视图或列表页面的情况。

ASP.NET MVC中这种场景有哪些好的方法?

在使用Classic ASP和ASP.NET的过去,我会处理输入,然后向用户显示成功消息或包含错误的表单 - 所有这些都来自同一页面。这似乎违背了最佳实践(SRP,视图中没有逻辑等)。

一种简单的方法是重定向到一个新页面,告诉用户他们的更改是成功的,但随后用户可以随时访问该页面。如果我开始使用逻辑来防止这种情况(即tempdata),那么解决方案就会变得很脏。

我可以重定向到目标网页,但没有确认。也许我可以依赖一个消息系统,当他们返回登录页面时向最终用户显示确认信息?

2 个答案:

答案 0 :(得分:3)

我使用具有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 :(得分:1)

你可以在viewdata中放置一些内容,并在页面中执行类似

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

并且您的用户将看到弹出窗口告诉他成功 http://jqueryui.com/demos/dialog/