在文本链接上单击设置cookie

时间:2015-09-17 08:58:22

标签: c# asp.net-mvc cookies

我想在有人点击文字链接时创建一个Cookie。我们的想法是,如果他们之前没有点击它,他们只会看到链接,一旦他们点击它,就会创建cookie。我检查cookie是否存在,如果存在,则不显示链接。

以下是我的控制器来创建Cookie:

public class SurveySurfaceController : Umbraco.Web.Mvc.SurfaceController

{
    [HttpPost]
    [ActionName("ClickedSurvey")]
    public ActionResult ClickedSurvey()
    {
        // Create a cookie if the link is clicked.
        HttpCookie myCookie = new HttpCookie("surveyCookie");
        Response.Cookies.Add(myCookie);

        return CurrentUmbracoPage();
    }
}

当有人点击我的PartialView中的文字链接时,如何调用此ActionResult

以下是视图

中的链接
<a href="https://www.surveymonkey.com/r/XW9FHF7" target="_blank">Some Survey</a>

我想要的是在有人点击链接时拨打ActionResult

有没有一种不使用JavaScript的好方法?

3 个答案:

答案 0 :(得分:4)

...添加

@Html.ActionLink("Some Survey","ClickedSurvey","SurveySurfaceController")


而不是您的<a>链接 对于surveymonkey,您的操作应该重定向到该链接 - 使用Response.Redirect(somePage);

答案 1 :(得分:2)

如果您不想重新加载页面,则必须使用AJAX进行此操作,否则请为此特定操作创建action link

@Html.ActionLink("Link Text,"ClickedSurvey","SurveySurface") //generates an achor tag

此外,您还需要当前的HTTP上下文,以便在MVC中设置cookie

 System.Web.HttpContext.Current.Response.Cookies.Add(yourcookie)

也用于重定向使用

return Redirect("your Url")

答案 2 :(得分:2)

我可以看到三种可行的解决方案:

  1. 使用JavaScript向您已定义的操作发出ajax请求;
  2. 使用JavaScript设置cookie客户端;
  3. 不是直接打开链接,而是先打开您的操作,然后发出Response.Redirect()
  4. 就个人而言,我会使用第一种方法。

    作为旁注,请更好地使用Response.SetCookie(),因为Response.Cookie.Add()可能会导致添加多个Cookie,而SetCookie会更新现有的Cookie(如果存在)。