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

求助:Alert无法正确显示Model中的日期字符串值

问题:Alert弹出日期字符串时显示错误值-2048

页面加载时@Model.EndDate已正确设置为字符串"03/01/2020",但前端JS的alert(date)弹出的值为-2048,无论Model中EndDate是DateTime还是string类型都会出现该问题,而@Model.Edit字段可正常工作。

前端JS代码

$(document).ready(function () {
    var edit= @Model.Edit.ToString().ToLower();
    if( edit !=true ) {
        $("#editWriteup").hide();
    }
    var date= @Model.EndDate;
    alert(date);
    $("#date").val(@Model.EndDate).change();
});

控制器代码片段

...
lastDate = lastSummaryWriteup.EndDate.ToString("MM/dd/yyyy");
edit = true;
}

var model = new SModel
{               
    EndDate = lastDate,
    Edit = edit
};

Model定义

public class SModel
{  
    public string EndDate { get; set; }
    public bool Edit { get; set; }
}

问题原因

当直接写var date= @Model.EndDate;时,Razor引擎会将字符串"03/01/2020"直接输出到JS代码中,最终生成的JS代码是:

var date= 03/01/2020;

在JavaScript中,这会被解析为除法运算;如果之前用DateTime类型,Razor可能直接输出了日期的内部数值(如Ticks转换结果),导致弹出异常值。核心问题是没有给字符串值添加引号,导致JS将其当成表达式而非字符串处理。

解决方法

方法1:直接添加双引号

修改JS中的日期变量赋值代码:

var date= "@Model.EndDate";
alert(date);
$("#date").val("@Model.EndDate").change();

Razor生成的最终JS代码会是:

var date= "03/01/2020";

此时Alert就能正确显示日期字符串。

方法2:使用Json.Encode确保安全(推荐)

如果日期字符串中可能包含特殊字符(如引号),用Json.Encode自动处理转义,避免JS语法错误或XSS风险:

var date= @Html.Raw(Json.Encode(Model.EndDate));
alert(date);
$("#date").val(@Html.Raw(Json.Encode(Model.EndDate))).change();

Json.Encode会将字符串转换为合法的JSON格式,Html.Raw避免Razor对其进行HTML编码,最终生成带引号的安全字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:00:58