将 UTC 偏移量传递到控制器路由中

Pass UTC offset into controller route

ASP.NET CORE 的新手,来自 WPF 背景。

在理解如何传递局部变量时遇到一些困难。

我有一个表格:

<span id="clock"></span>
<form asp-action="Create" asp-controller="Session" method="post" asp-route-session="@Model.Session">
            <input asp-for="@Model.Session.ClientId" class="form-control" style="display: none" />
            <ejs-dropdownlist id="clinics" dataSource="@Model.LinkableClinics" placeholder="Select Clinic" popupHeight="220px" ejs-for="@Model.Session.ClinicId">
                <e-dropdownlist-fields text="Name" value="ClinicId"></e-dropdownlist-fields>
            </ejs-dropdownlist>
            <ejs-dropdownlist id="employees" dataSource="@Model.LinkableEmployees" placeholder="Select Employee" popupHeight="220px" ejs-for="@Model.Session.EmployeeId">
                <e-dropdownlist-fields text="Name" value="EmployeeId"></e-dropdownlist-fields>
            </ejs-dropdownlist>
            <ejs-datetimepicker id="startdatetimepicker" placeholder="Select a date and time" ejs-for="@Model.Session.StartTime"></ejs-datetimepicker>
            <ejs-datetimepicker id="enddatetimepicker" placeholder="Select a date and time" ejs-for="@Model.Session.EndTime"></ejs-datetimepicker>
            <div class="form-group">
                <input type="submit" value="Create Session" class="btn btn-primary" />
            </div>
        </form>

我想将 asp-route-offset 添加到我的表单中,但我不知道如何将本地计算的变量传递到此路由中。

这是一个 post,所以我不能只使用 Url.Redirect() 自定义 url 生成器。

我还尝试在 "value"

中添加隐藏字段和 运行 计算
 <input asp-for="@Model.Session.Offset" class="form-control" style="display: none" value="getValue()"/>

我在 <script> 部分计算我的偏移量如下:

<script type="text/javascript">

    window.onload = loaded;

    function loaded() {

        var clockElement = document.getElementById("clock");

        function updateClock(clock) {
            clock.innerHTML = new Date().getTimezoneOffset() / 60;

        }
    }
</script>

我试过在此处设置变量或 @Model 对象,但似乎什么都不想坚持。

有人有过尝试传递这样的变量的经验吗?还是将 UTC 偏移量传递到我的时间戳中的更好方法?

您正在尝试混合和匹配服务器端和客户端发生的事情。在服务器发送响应后,获取偏移量的脚本在客户端运行。您的 Razor 代码在服务器端运行,甚至在客户端收到页面之前。

总而言之,如果要更新值,则必须通过客户端方式进行,即JavaScript:

document.getElementById('#Session_Offset').value = new Date().getTimezoneOffset();

您根本不能使用 asp-route-offset 之类的东西,因为偏移量来自客户端,不能用于生成 post URL。因此,您需要坚持使用隐藏输入方法。