ASP.NET MVC3:将cookie传递给辅助方法

时间:2012-06-15 09:26:47

标签: c# asp.net asp.net-mvc-3 cookies

我要做的是基本上设置网址,将您带到使用您上次已知参数的网页。

  1. 您访问参数show all set false的页面,因此它显示为非列表。

  2. 然后将show all更改为true。因此它显示在列表中。

  3. 一小时后,您重新访问该页面。它知道你最后一次显示真实。:

  4. MR控制器 - 索引:

    HttpCookie mr1 = new HttpCookie("MR1", "test");
    Request.Cookies.Add(mr1); // Save all parameters used in cookies. (WORKING).
    

    使用按钮查看:

    <input type="button" class="cancel" value="Cancel" onclick="location.href='@MyNS.Helpers.HtmlHelper.MRUrl(Request.Cookies)'">
    

    MyNS.Helpers.HtmlHelper:

    public static String MRUrl(COOKIES? myCookie)
        {
            //If not null, add to object array.
            myCookie["MR1"].Value;
            myCookie["MR2"].Value;
    
            return @Url.Action("Index", "MR"); // Plus non null variables as parameters.
        }
    

    我无法通过我的助手访问任何Cookie。我也不知道这是否是最好的方法。我只想取出具有所用参数的cookie信息,并使用它来构建所需的URL。

    将有6-7种不同的索引页变量存储方法。

1 个答案:

答案 0 :(得分:2)

我想你想要一个像这样的UrlHelper扩展名:

public static class UrlHelperExtensions
{
    private static string GetCookieOrDefault(HttpRequestBase request, string name)
    {
        return request.Cookies[name] == null ? "" : request.Cookies[name].Value;
    }

    public static string MRUrl(this UrlHelper url)
    {
        var request = url.RequestContext.HttpContext.Request;

        return url.Action("Index", "MR", new
        {
            mr1 = GetCookieOrDefault(request, "MR1"),
            mr2 = GetCookieOrDefault(request, "MR2"),
            mr3 = GetCookieOrDefault(request, "MR3")
        });
    }
}

然后您可以在任何视图中使用它:

<a href="@Url.MRUrl()">link text</a>

或者你的按钮......

<input type="button" class="cancel" value="Cancel" onclick="location.href='@Url.MRUrl()';">

编辑:显然,在使用帮助程序之前,您需要导入UrlHelperExtensions类的命名空间。

相关问题