我的剃刀视图中有以下代码,我需要设置一些javascript变量来设置来自剃刀的值。
但是,未设置变量的值。
var listPuntos =[];
function onSelect(e) {
var dataItem = this.dataSource.view()[e.item.index()];
@{
var proveedorID = 0;
<text>proveedorID = dataItem.ProveedorID</text>
var list = new UnitOfWork().PuntosVentaProveedorRepository.Get().Where(x => x.ProveedorID == proveedorID);
proveedorID = 0;
<text>listPuntos = list; </text>;
<text>
var displayText;
$.each(listPuntos, function (key, value) {
if (displayText == undefined)
displayText = value.Nombre + ', ';
else
displayText = displayText + value.Nombre + ', ';
});
document.getElementById("puntos").value = displayText.slice(0,-2);
</text>
}
}
鉴于您的具体示例,我将首先减少所需的<text>
块的数量,而不是用 @{ … }
包装较短的 C# 位。这提高了可读性并减少了混乱。例如:
var listPuntos =[];
function onSelect(e) {
var dataItem = this.dataSource.view()[e.item.index()];
@{ var proveedorID = 0; }
proveedorID = dataItem.ProveedorID;
@{ var list = new UnitOfWork().PuntosVentaProveedorRepository.Get().Where(x => x.ProveedorID == proveedorID); }
proveedorID = 0;
listPuntos = @Json.Encode(list);
var displayText;
$.each(listPuntos, function (key, value) {
if (displayText == undefined)
displayText = value.Nombre + ', ';
else
displayText = displayText + value.Nombre + ', ';
});
document.getElementById("puntos").value = displayText.slice(0,-2);
}
接下来,要将 C# 值注入服务器发出的 JavaScript 代码中,您需要在 JavaScript 中对该值进行编码。最好的方法是将其转换为 JSON。这是在上面使用 Json.Encode
完成的。特别是,行内容如下:
listPuntos = @Json.Encode(list);
我已经用过Json.Encode
但当然你可以自由使用任何适合你项目的JSON库。
你应该将HTML代码和JavaScript代码分开。首先,不要在加载 View 时从 View 调用任何服务器代码。通过模型属性以适当的格式(即 json 格式)推送所有必要的数组等,然后从该属性的值填充任何客户端列表。其次 - 像它一样移动代码:
var displayText;
$.each(listPuntos, function (key, value) {
if (displayText == undefined)
displayText = value.Nombre + ', ';
else
displayText = displayText + value.Nombre + ', ';
});
document.getElementById("puntos").value = displayText.slice(0,-2);
到适当的部分,喜欢它:
@section scripts
{
<script>
.....
</script>
}