将 C# 字符串连接到 JavaScript/knockout 函数/observables

Posted

技术标签:

【中文标题】将 C# 字符串连接到 JavaScript/knockout 函数/observables【英文标题】:Concatenate C# strings to JavaScript/knockout functions/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>

我发现这里有些问题

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

也许你可以帮我一把?

【问题讨论】:

您令人困惑的客户端和服务器端代码。不要那样做。 我建议不要使用 C#/Razor 来生成 JavaScript。相反,使用 ajax 将数据发送到页面并从该数据生成 observables。 您无法从 JavaScript 将数据分配回 ViewModel 对象 【参考方案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(...)这样的方法,它可以连接那个字符串,让它看起来像一个普通的变量?

以上是关于将 C# 字符串连接到 JavaScript/knockout 函数/observables的主要内容,如果未能解决你的问题,请参考以下文章

将字符串连接到 SELECT * MySql

将字符串连接到列表[重复]

如何将字符串连接到刀片中的 $ 变量?

播放 wav 文件,将字符串连接到调用文件

将字符串连接到 pig 中的字段

oracle通过添加regexp_like将字符串连接到数字不起作用