You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Umbraco中通过JS调用C#创建Cookie失败的求助

解决Umbraco中点击前端按钮创建Cookie的问题

你遇到的核心问题是服务器端C#代码和客户端JS代码的执行时机完全不匹配——<% %>包裹的C#代码是在服务器渲染页面时就执行完毕的,根本等不到用户点击按钮的触发;直接把C#塞到JS函数里还会破坏JS的语法结构,导致浏览器找不到AddCookie函数。

下面给你三种可行的解决方案,根据你的需求选择:

方法一:用ASP.NET服务器端按钮(传统回发模式)

如果可以接受页面刷新,这是最简单的方式:

<asp:Button ID="btnSetDesktopCookie" runat="server" Text="Click Here" OnClick="btnSetDesktopCookie_Click" />

然后在对应的后台代码块(比如Umbraco模板的后台代码或页面.cs文件)中添加:

protected void btnSetDesktopCookie_Click(object sender, EventArgs e)
{
    HttpCookie IsDesktopCookie = new HttpCookie("IsDesktopVersion");
    IsDesktopCookie.Value = "true";
    IsDesktopCookie.Expires = DateTime.Now.AddDays(1d);
    Response.Cookies.Add(IsDesktopCookie);
    // 刷新页面保持用户体验一致性
    Response.Redirect(Request.RawUrl);
}

用户点击按钮后,页面会回发到服务器,服务器创建Cookie后再返回页面。

方法二:AJAX异步调用后端接口(无刷新体验)

想要无刷新创建Cookie,可以用Umbraco的SurfaceController写一个后端接口,再用JS调用:

1. 创建SurfaceController

public class CookieSurfaceController : SurfaceController
{
    [HttpPost]
    public ActionResult SetDesktopCookie()
    {
        HttpCookie IsDesktopCookie = new HttpCookie("IsDesktopVersion");
        IsDesktopCookie.Value = "true";
        IsDesktopCookie.Expires = DateTime.Now.AddDays(1d);
        Response.Cookies.Add(IsDesktopCookie);
        return Json(new { success = true });
    }
}

2. 前端JS调用

<a href="javascript:void(0);" onclick="AddCookie();">Click Here</a>

<script>
function AddCookie() {
    fetch('/umbraco/surface/cookiesurface/setdesktopcookie', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        }
    })
    .then(res => res.json())
    .then(data => {
        if (data.success) {
            alert("Cookie已成功创建!");
        }
    })
    .catch(err => console.error('创建Cookie失败:', err));
}
</script>

注意SurfaceController的路由格式是/umbraco/surface/[控制器名]/[动作名],上面的路径要和你的控制器名称对应。

方法三:直接用JS创建Cookie(无需服务器参与)

如果这个Cookie只是前端使用,或者服务器端后续读取也没问题,完全可以直接用JS创建,不需要C#:

<a href="javascript:void(0);" onclick="AddCookie();">Click Here</a>

<script>
function AddCookie() {
    const expireDate = new Date();
    expireDate.setTime(expireDate.getTime() + (1 * 24 * 60 * 60 * 1000)); // 1天后过期
    document.cookie = `IsDesktopVersion=true; expires=${expireDate.toUTCString()}; path=/`;
    alert("Cookie已创建!");
}
</script>

这种方式最轻便,完全在客户端完成,服务器端依然可以通过Request.Cookies["IsDesktopVersion"]读取这个Cookie。

内容的提问来源于stack exchange,提问作者Mik3NL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:06