如何将javascript与razor语法正确结合
我的razor视图中有以下代码,我需要设置一些javascript变量来设置razor的值 但是,未设置变量的值如何将javascript与razor语法正确结合,javascript,c#,asp.net-mvc,asp.net-mvc-4,razor,Javascript,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我的razor视图中有以下代码,我需要设置一些javascript变量来设置razor的值 但是,未设置变量的值 var listPuntos =[]; function onSelect(e) { var dataItem = this.dataSource.view()[e.item.index()]; @{ var proveedorID = 0; <text>proveedorID = d
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>
}
}
var listPuntos=[];
功能选择(e){
var dataItem=this.dataSource.view()[e.item.index()];
@{
var PROVEDEORID=0;
proveedorID=dataItem.proveedorID
var list=new UnitOfWork();
proveedorID=0;
listPuntos=list;
var显示文本;
$.each(listPuntos,函数(键,值){
if(displayText==未定义)
displayText=value.Nombre+',';
其他的
displayText=displayText+value.Nombre+',';
});
document.getElementById(“puntos”).value=displayText.slice(0,-2);
}
}
您应该将html代码和javascript代码分开。
首先,在加载视图时,不要从视图调用任何服务器代码。通过模型属性以适当的格式(即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>
}
@节脚本
{
.....
}
您应该将html代码和javascript代码分开。
首先,在加载视图时,不要从视图调用任何服务器代码。通过模型属性以适当的格式(即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>
}
@节脚本
{
.....
}
给你一个具体的例子,我首先要减少所需的
块的数量,而不是用@{…}
来包装较短的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);
}
接下来,要向服务器发出的JavaScript代码中注入一个C#值,需要用JavaScript对该值进行编码。最好的方法是将其转换为JSON。这是在上面使用。特别是,该行的内容如下:
listPuntos = @Json.Encode(list);
我已经使用了
Json.Encode
,但是你当然可以自由使用任何适合你的项目的Json库。给你一个具体的例子,我会先减少所需的
块的数量,而不是仅仅用@{…}
包装较短的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);
}
接下来,要向服务器发出的JavaScript代码中注入一个C#值,需要用JavaScript对该值进行编码。最好的方法是将其转换为JSON。这是在上面使用。特别是,该行的内容如下:
listPuntos = @Json.Encode(list);
我曾经使用过
Json.Encode
,但当然,您可以自由使用适合您的项目的任何Json库。这只会在每次运行时返回完全相同的结果,因为list
始终是的结果。其中(x=>x.provedorid==0)
每次运行时只会返回完全相同的结果,因为list
始终是的结果。其中(x=>x.ProveedorID==0)
不清楚您试图实现什么,得到什么结果以及期望什么var list=new UnitOfWork(…
是razor代码,在将其发送到视图之前在服务器上进行评估(并且是的结果)。其中(x=>x.ProveedorID==0)
。更改javascript变量-proveedorID=dataItem.proveedorID
不会更改var list
的结果。如果您希望在客户端上筛选结果,则需要ajax调用返回所需结果的服务器方法,或者需要在客户端中存储所有内容(分配给javascript数组)并搜索该数组(但只有在未筛选的结果集很小的情况下才会这样做)它不清楚您试图实现什么,或者您得到什么结果以及您的期望值。var list=new UnitOfWork(…
是razor代码,在发送到视图之前在服务器上进行评估(并且是的结果)。Where(x=>x.ProveedorID==0)
。更改javascript变量-ProveedorID=dataItem.ProveedorID
不会更改var list
的结果。如果希望在客户端上筛选结果,则需要ajax调用返回所需结果的服务器方法,或者需要在客户端中存储所有内容(分配给javascript数组)并搜索该数组(但只有在未筛选的结果集很小的情况下才会这样做)