Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将javascript与razor语法正确结合_Javascript_C#_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

如何将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

我的razor视图中有以下代码,我需要设置一些javascript变量来设置razor的值

但是,未设置变量的值

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数组)并搜索该数组(但只有在未筛选的结果集很小的情况下才会这样做)