名称XXXX在当前上下文中不存在-Jquery

时间:2016-07-22 15:23:44

标签: javascript jquery asp.net-mvc

我有这段代码

function pickdet(Id) {
        //alert(Id);
        var dd = Id;
        $.ajax({
            cache: false,
            url: "/PVSigns1/GetDetails",
            data: { 'Id' : Id },
            type: "GET",
            dataType: "json",
            success: function (data) {
                //alert('i dey here')
                var row = "";
                $.each(data, function (index, item) {
                    //row += "<tr><td>" + item.VitalSigns.Sign + "</td><td>" + item.SignValue + "</td><td> <input type= 'button'  onclick= location.href = + '<Url.Action("Create", "PVSigns1", new { Id = item.PVSignId }) ' />" + "</td></tr>";
                    row += "<tr><td>" + item.VitalSigns.Sign + "</td><td>" + item.SignValue +
                        "</td><td> <button class='btn btn-xs btn-success' onclick = '@Url.Action("Create","PVSigns1", new { Id = item.PVSignId })'> <i class='fa fa-edit fa-lg'></i> Edit</button></td></tr>";
                });
                $("#pvv").html(row);
            },
            error: function (result) {
                $("#pvv").html('Nothing to show <br /> <p />' + result );
            }
        });
    }

问题是它指向了某个项目并抱怨“名称项目在当前上下文中不存在”。错误是在@ Url.Action之后发生的,之前的其他错误是正确的。

"</td><td> <button class='btn btn-xs btn-success' onclick = '@Url.Action("Create","PVSigns1", new { Id = item.PVSignId })'> <i class='fa fa-edit fa-lg'></i> Edit</button></td></tr>";

3 个答案:

答案 0 :(得分:2)

看看这一行,

  

@ Url.Action(&#34; Create&#34;,&#34; PVSigns1&#34;,new {Id = item.PVSignId})

但是在你的代码中,item是你循环中的一个javascript变量。 你无法将javascript变量传递给Url.Action方法,因为Url.Action代码将在服务器之前执行(那时它对未来的ajax一无所知)打电话给页面!!!)

解决方案是使用Url.Action的另一个重载来构建Create操作方法的基本URL并附加javascript变量属性并使用它。

此外,将onclick事件设置为网址可能不起作用。您可以考虑在按钮中添加click事件并重定向到网址。您可以将网址保留在html 5数据属性中。

 var baseLink='@Url.Action("Create","PVSigns1")';
 $.each(data, function (index, item) {
    var link=baseLink+item.PVSignId; 
    row += "<tr><td>" + item.VitalSigns.Sign + "</td><td>" + item.SignValue +
       "</td><td> <button class='editBtn' data-url='"+link+"'>
                              <i class='fa fa-edit fa-lg'></i> Edit</button></td></tr>";
 });

并有一些jQuery代码来侦听此按钮上的click事件并重定向到我们数据属性中的url

$(function(){

  $("button.editBtn").click(function(e){
    e.preventDefault();
    window.location.href=$(this).attr("url");
  });

});

答案 1 :(得分:1)

您有引用问题,并尝试将c#与javascript变量混合使用。

你可以尝试像

这样的东西
success: function (data) {

       var row = "";
       //the "base url"
       var url = '@Url.Action("Create","PVSigns1")' + '?Id=';
       $.each(data, function (index, item) {
            //add the id value here
            var clickUrl= url +item.PVSignId;
            row += "<tr><td>" + item.VitalSigns.Sign + "</td><td>" + item.SignValue +
                    "</td><td> <button class='btn btn-xs btn-success' onclick = '" + clickUrl +"'> <i class='fa fa-edit fa-lg'></i> Edit</button></td></tr>";
            });
            $("#pvv").html(row);
        },

答案 2 :(得分:0)

JS语法错误:

"</td><td> <button class='btn btn-xs btn-success' onclick = '@Url.Action("Create","PVSigns1", new { Id = item.PVSignId })'> <i class='fa fa-
^--start string                                                          ^--end string

您无法在该字符串中嵌入用于分隔字符串的相同类型的“裸”引号。他们必须逃脱:

.... @Url.Action(\"Create\", \"PVSigns1\" ...