0

我从用户级别和员工级别有相同的看法。当用户登录到应用程序时,他会看到他的活动并从Create视图中创建新活动。他们将从员工中搜索用户并查看用户信息,然后在同一Create视图中代表用户创建新活动。

棘手就在这里,两者都来不同的观点看Create风景。当他们取消并保存时,他们必须返回上一页。

如何处理?

ex:
http://localhost/members/listActivities - for members
http://localhost/staff/memberinfo

To 

http://localhost/members/create
4

2 回答 2

2

对于“取消”操作,您可以完全跳过服务器端的参与,并使用 JavaScript 将浏览器引导到其先前的位置。(这还有一个额外的好处,那就是支持将来从另一个地方来到那里的任何人。)这样的事情:

<input type="button" value="Cancel" id="cancelButton" />
<!-- and later... -->
<script type="text/javascript">
    $('#cancelButton').click(function () {
        window.history.back();
    });
</script>

对于“保存”操作,您能否在服务器上辨别他们是哪种“类型”用户并相应地指导他们?如果没有,也许您需要在 Create 操作首次响应视图时跟踪它们的来源。也许该操作可以接受重定向作为参数?像这样的东西:

public ActionResult Create(string redirectUrl)

然后,您可以将该参数添加到创建视图模型中,将其存储在隐藏字段或类似性质的东西中。当您在保存时发回创建操作时,您将再次将其包含在该参数集中并将其用于重定向(当然,如果它是空的,则默认为特定页面)。

然后,每当您有一个@Html.ActionLinkto时,Create您就会将 aredirectUrl作为路由值包含在内。

编辑:为了完整起见,正如 Oliver 在下面的评论中提到的,您可以尝试通过Request.UrlReferrer. 这将在非发布调用中Create用于自动填充将在发布调用中返回的隐藏字段。(因为在帖子调用中,引用者是页面本身,所以这没有帮助。)但是请记住这里的两个主要事项:

  1. 浏览器控制引荐来源网址,而您没有。一些浏览器可能会发送错误的引荐来源网址,或者更常见的是根本没有。它可能在 10 次中有 9 次有效,也可能不会。但是,再次出于完整性考虑,它可以用作后备来捕获您(或其他开发人员)没有明确包含 aredirectUrl作为路由值的情况。
  2. 这将控制器耦合到 HTTP 上下文。对于您的需求来说,这可能永远不会成为问题,但它首先破坏的是该操作方法的单元测试。除非绝对必要,否则最好避免这种耦合,并在使用时确切知道自己在做什么。
于 2013-03-18T20:03:43.203 回答
0

您可以向您的 UserViewModel 添加一个名为 IsStaff 的属性。这将是一个布尔值。对于员工用户,它将为 true,否则将为 false。然后在执行创建功能后,您将获得当前用户的 IsStaff 值并将其签入if 条件并将它们重定向到不同的操作。

public bool IsStaff{get;set;}

对于创建:

public ActionResult Create()
{
    ...//do creation here
    if(UserRepository.GetUserByUsername(User.Identity.Name).IsStaff==true)
        return RedirectToAction("staff","memberinfo");
    else
        return RedirectToAction("members","listActivities");
    return View();
}
于 2013-03-18T20:30:14.010 回答