MVC Razor视图中JS函数接收UK日期字符串异常问题求助
解决Razor视图中传递UK格式日期字符串到JS函数的问题
嘿,我立刻就发现你遇到的问题根源了!当你直接在JS里写@Model.dateFrom时,Razor引擎会把这个日期字符串里的斜杠/当成除法运算符来解析。举个例子,你的01/03/2018会被计算成 1 ÷ 3 ÷ 2018 ≈ 0.000165,而不是作为完整的日期字符串传入LoadDatatable函数——这就是为什么日期内容完全变了的原因。
下面给你几种靠谱的解决方案:
方案1:给日期字符串包裹单引号
最简单的方式就是把Razor输出的日期用单引号括起来,让JS把它识别成字符串:
<script type="text/javascript"> $(document).ready(function () { function LoadDatatable(to, from) { alert(to); alert(from); } // 给日期字符串添加单引号,确保JS识别为字符串类型 LoadDatatable('@Model.dateFrom', '@Model.dateTo'); }); </script>
方案2:用Json.Encode安全序列化(推荐)
如果你的日期字符串里可能包含特殊字符(虽然UK格式日期一般不会),或者想更严谨地处理字符串转JS字面量,推荐使用Json.Encode方法,它会自动帮你添加引号并处理转义:
<script type="text/javascript"> $(document).ready(function () { function LoadDatatable(to, from) { alert(to); alert(from); } // 使用Json.Encode序列化字符串,避免解析错误 LoadDatatable(@Json.Encode(Model.dateFrom), @Json.Encode(Model.dateTo)); }); </script>
额外说明
如果你的模型里的dateFrom和dateTo其实是DateTime类型(而不是字符串),可以先通过ToString指定UK格式再输出:
LoadDatatable('@Model.dateFrom.ToString("dd/MM/yyyy")', '@Model.dateTo.ToString("dd/MM/yyyy")');
这样修改后,LoadDatatable函数就能收到正确的UK格式日期字符串啦!
内容的提问来源于stack exchange,提问作者tcode
相关产品推荐
相关产品推荐

