将 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。因此,您需要坚持使用隐藏输入方法。
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。因此,您需要坚持使用隐藏输入方法。