大多数ASP.NET MVC实施例I所看到的情景描绘其中用户正在观看(或对象集合)的对象,然后从该页面移动到一个显示器的形式的用户完成。在提交具有良好的输入形式时,用户被重定向回页面,显示对象(或列表),并且用户可以看到他们的变化是成功的。

我碰到一个场景,其中有每个业务规则没有视图或列表页。

什么是此方案中的ASP.NET MVC一些好的办法?

在过去与传统的ASP和ASP.NET,我会处理的输入,然后向用户显示一个成功消息或出错的形式 - 在同一页面全部。这似乎是它违背了最佳实践(SRP,在视图没有逻辑,等等)。

一个简单的方法是重定向到一个新的页面,告诉他们的改变是成功的用户,但随后的用户可以访问该页面的任意时间。如果我开始把在逻辑来防止这种(即TempData的),将溶液开始感觉脏。

我可以重定向到一个登录页面,但没有确认。也许我可以依靠邮件系统上,显示了最终用户,当他们返回到着陆页的确认?

有帮助吗?

解决方案

我使用具有ShowMessage方法的基本控制器。这个方法接收要显示的消息(或资源关键,因为你想)及显示的消息的类型的枚举(成功,错误通知等)。在动作返回之前,我叫ShowMessage与相应的消息,例如

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

然后,在主页我必须呈现,其显示的情况下有任何的报文的共享局部视图的辅助方法的调用。消息存储在TempData用固定键。您可以使用出现在蓝图CSS框架的样式显示根据消息其类型。

下面是一些代码:

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>

我敢肯定有可能是更好的方法,比如使用过滤器,但这种方法是非常有帮助我。

其他提示

你可以把东西可视数据,并在页面做一些像

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

和您的用户将看到一个弹出窗口告诉他关于成功 http://jqueryui.com/demos/dialog/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top