将 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> </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> </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的主要内容,如果未能解决你的问题,请参考以下文章