2012-06-15 48 views
0

我想要做的事情基本上是设置URL以将您带到使用上次已知参数的网页。ASP.NET MVC3:将cookie传递给帮助程序方法

  1. 您访问一个参数为show all set false的页面,所以它在列表中显示为非。

  2. 然后,您将show all更改为true。所以它显示在列表中。

  3. 一小时后,您重新访问该页面。它知道你最后不得不全部显示为真:

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. 
    } 

我不能做的是访问任何Cookies通过我的帮手。我也不知道这是否是最好的方式。我只想取出使用参数的cookie信息,并使用它来构建所需的URL。

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

回答

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类的命名空间。