Asp.net mvc ASP.NET MVC向最终用户显示操作已成功

Asp.net mvc ASP.NET MVC向最终用户显示操作已成功,asp.net-mvc,views,single-responsibility-principle,Asp.net Mvc,Views,Single Responsibility Principle,我看到的大多数ASP.NET MVC示例都描述了这样的场景:用户查看对象(或对象集合),然后从该页面移动到显示用户完成的表单的页面。提交输入正确的表单后,用户将重定向回显示对象(或列表)的页面,用户可以看到他们的更改成功 我遇到了这样一个场景:每个业务规则都没有视图或列表页 在ASP.NET MVC中,有哪些好方法可以解决此问题? 在过去使用经典ASP和ASP.NET时,我会处理输入,然后向用户显示一条成功消息或带有错误的表单-所有这些都来自同一页面。这似乎违背了最佳实践(SRP、视图中没有逻辑

我看到的大多数ASP.NET MVC示例都描述了这样的场景:用户查看对象(或对象集合),然后从该页面移动到显示用户完成的表单的页面。提交输入正确的表单后,用户将重定向回显示对象(或列表)的页面,用户可以看到他们的更改成功

我遇到了这样一个场景:每个业务规则都没有视图或列表页

在ASP.NET MVC中,有哪些好方法可以解决此问题?

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

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


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

您可以在viewdata中放置一些内容,并在页面中执行以下操作

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

$(“#successDialog”).dialog('open');
您的用户将看到一个弹出窗口,告诉他成功的消息

我使用具有ShowMessage方法的基本控制器。此方法接收要显示的消息(或资源键,如您所愿)和指示消息类型(成功、错误、通知等)的枚举。在返回操作之前,我使用适当的消息调用ShowMessage,例如

ShowMessage(“这里的消息不错。”,MessageType.Success)

然后在母版页中,我调用了一个helper方法,该方法呈现了一个共享的局部视图,如果存在任何消息,该视图将显示消息。消息使用固定键存储在
TempData
中。可以使用中显示的样式根据消息类型显示消息

以下是一些代码:

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>


我确信可能有更好的方法,比如使用过滤器,但这种方法对我非常有用。

如果您使用Post Redirect Get(PRG)模式,您将不得不使用TempData而不是ViewData。@uvita不一定,它可能类似于return REDIRECTOACTION(“Index”,new{success=true});索引操作设置了ViewData我必须指出,如果用户中止请求和/或快速单击另一个链接(导航到另一个页面),那么用户将在错误和混乱的环境中看到来自TempData的消息。这是因为TempData将由任何第一个到达服务器的用户请求获取。