在asp.net mvc应用程序中存储公共动作参数数据的位置

时间:2009-08-10 01:13:36

标签: asp.net-mvc

我们的Web应用程序在每个操作方法中都需要一个通用参数。

在我们的案例中,它是客户帐户ID,我们需要支持以下方案

一个。一组用户可能具有相同的帐户ID,可以从用户个人资料中派生。

湾客户支持团队应该能够明确提供客户的帐户ID,并且应该能够在任何页面上切换帐户

我们试图不使用asp.net会话来存储这类数据。

是否还有其他选项来存储和管理这种常见的参数数据?

2 个答案:

答案 0 :(得分:1)

将其作为ecrypted值写入主页上的隐藏字段,并将值提供给每个视图。当用户处于客户角色时,在能够检索和更新帐户数据的页面上放置一个更改帐户“控件” - 可能是通过AJAX - 来更改当前帐户ID。使用自定义基本控制器执行此操作可能最容易,该控制器直接通过ValueProvider获取数据并将其作为属性存储在页面上,而不是将其作为每个方法的参数。

答案 1 :(得分:0)

使用路由获取值。因此,如果您需要更改ID,可以使用其他URL或将其作为参数发布。

每当您需要该值时,只需询问ValueProvider即可 如果它是空白 - 使用用户配置文件中的那个。

当然你最好写一个小方法来做到这一点:

// Register route like:
route.MapRoute("ProvidesAccountId", "{controller}/{id}/account{accountId}/{action}.aspx")

// Property on the base controller
protected Account CurrentAccount {
    get {
        var accountId = ValueProvider.GetValue<int?>("accountId"); // GetValue is just a helper
        if (accountId.HasValue)
            return YourRepositor.GetAccountBy(accountId.Value);
        return CurrentUser.Account;
    }
}

不使用当前用户的帐户点击网址:个人资料/ 123 / account / Edit.aspx
要使用其他帐户,您可以点击以下网址:个人资料/ 123 / account-456 / Edit.aspx

你明白了。

干杯,
德米特里。