【问题标题】:Concatenate C# strings to JavaScript/knockout functions/observables将 C# 字符串连接到 JavaScript/knockout 函数/observables
【发布时间】:2017-02-14 03:04:28
【问题描述】:

我正在尝试这样的事情:

string temp = "";

<script type="text/javascript">
if (@min >= @customDataBindArray+'().length') {
    for ( i = 0; i < @columns.Count; i++)
    {
        @temp+="<td>&nbsp;</td>";
    }

    for (i = 0; i < @min - @customDataBindArray+'().length'); i++)
    {
        $('.List tr:last').after(@Html.Raw("<tr>" + @temp + "</tr>"));
    }
}
</script>

我发现这里有些问题

  1. 我得到一个System.NullReferenceException for @temp,但我将它设置为一个空字符串,删除@Html.Raw 将删除异常,删除@Html.Raw 后-> @temp 未写入最终的html-文件
  2. 我正在尝试连接一个可观察的@customDataBindArray+'().length,这将导致MyObservable+'().length'

也许你可以帮我一把?

【问题讨论】:

  • 您令人困惑的客户端和服务器端代码。不要那样做。
  • 我建议不要使用 C#/Razor 来生成 JavaScript。相反,使用 ajax 将数据发送到页面并从该数据生成 observables。
  • 您无法从 JavaScript 将数据分配回 ViewModel 对象

标签: c# jquery asp.net-mvc razor knockout.js


【解决方案1】:

您不能从 JavaScript 将数据分配回 ViewModel 对象

 <script type="text/javascript">
var temp = '';
    if (@min >= @customDataBindArray+'().length') {
        for ( i = 0; i < @columns.Count; i++)
        {
            temp+="<td>&nbsp;</td>";
        }

        for (i = 0; i < @min - @customDataBindArray+'().length'); i++)
        {
            $('.List tr:last').after("<tr>" + temp + "</tr>");
        }
    }
    </script>

这可能有效

【讨论】:

  • 使用@customDataBindArray+'().length' 将导致MyObservable+'().length'
  • 最好的做法是将值存储在隐藏的@html标签中,并使用 dosumentread 并从 jquery 中读取并使用函数中的值。否则这将是非常肮脏和糟糕的编程
  • 可能有像@Html.Raw(...)这样的方法,它可以连接那个字符串,让它看起来像一个普通的变量?
猜你喜欢
  • 1970-01-01
  • 2013-10-03
  • 2014-04-29
  • 1970-01-01
  • 2018-05-28
  • 2023-03-06
  • 2016-03-02
  • 1970-01-01
  • 2016-11-07
相关资源
最近更新 更多