【问题标题】:Pass C# variable to helper function in jsrender template将 C# 变量传递给 jsrender 模板中的辅助函数
【发布时间】:2017-05-21 07:54:36
【问题描述】:

我需要将我的模型值之一传递给 jsrender 模板中的函数。我尝试使用 @ 访问 C# 变量,但它不起作用。下面是我的代码

<script type="text/x-jsrender" id="TemplateDate">>
 {{:~formatTemplateDate(Model.EstimatedCompletionDate)}} 
</script>

这是我的辅助函数。

$.views.helpers({
    formatTemplateDate: function (dateEstimated) {
        "use strict";
        if (dateEstimated !== null) {
            if (!isSafari) {
                var options = {
                    year: "numeric",
                    month: "short",
                    day: "numeric",
                    hour: "2-digit",
                    minute: "2-digit"
                };
                return dateEstimated.toLocaleTimeString("en-us", options);
            } else {
                return dateEstimated;
            }
        } else {
            return null;
        }
    }
});

这是我在页面中遇到的错误

Error: n.toLocaleDateString is not a function.

提前致谢。

Dinesh。

【问题讨论】:

  • 参考下面的问题,这可能对你有帮助stackoverflow.com/questions/20948193/…
  • 我的问题是将模型值传递给辅助函数。
  • 那个“jsrender”脚本在哪里? @ 只能在 razor 视图中工作,而不是在普通的 html 或 js 文件中。
  • 请定义“不工作”。您是否看到错误(如果有,请指定 - 同时检查 javascript 控制台)?您在呈现的 html 中看到了什么(浏览器中的“查看源代码”)?
  • @HansKesting 是的,我在剃刀视图中使用 jsrender。我已经用错误详细信息更新了问题。

标签: javascript c# razor jsrender


【解决方案1】:

我找到了解决办法。我们不能将 @Model.EstimatedCompletion 日期时间变量值传递给辅助函数。需要将其转换为字符串,并在辅助函数中将其转换回 Datetime()。下面是修改后的代码。

<script type="text/x-jsrender" id="TemplateDate">>
 {{:~formatTemplateDate('@Model.EstimatedCompletionDate')}} 
</script>

在我的辅助函数中,将其转换回日期类型,var formatedDate = new Date(date);

$.views.helpers({
    format: function (date) {
        "use strict";
        var formatedDate = new Date(date);
        if (!isSafari) {
            var options = {
                year: "numeric",
                month: "short",
                day: "numeric"
            };
            return formatedDate.toLocaleDateString("en-us", options);
        } else {
            return formatedDate;
        }
    }
});

谢谢,

Dinesh。

【讨论】:

    【解决方案2】:

    尝试使用@Html.Raw() 将值传递给函数:

    <script type="text/x-jsrender" id="TemplateDate">>
         {{:~formatTemplateDate('@Html.Raw(Model.EstimatedCompletionDate))')}} 
    </script>
    

    【讨论】:

    • 它给你什么错误?页面源中显示的值是多少?
    • 错误:n.toLocaleDateString 不是函数。这是我的页面出现的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 2013-01-16
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多