求助: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
相关产品推荐
相关产品推荐

