Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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有条件地构建mvc actionlink_Javascript_Jquery_Asp.net_Asp.net Mvc_Razor - Fatal编程技术网

Javascript有条件地构建mvc actionlink

Javascript有条件地构建mvc actionlink,javascript,jquery,asp.net,asp.net-mvc,razor,Javascript,Jquery,Asp.net,Asp.net Mvc,Razor,这是在VB.NET MVC 3 Razor视图中,当返回JsonResult of success时触发。问题是,如果data.Object.Status=='Completed',我想有条件地构建一个actionlink 我环顾四周,似乎没有任何东西适合解决这个问题。这是razor中actionlink的外观: @Html.ActionLink("Completed(Print Cert)", "Ind_Cert", "Printing", New With {.firstName = cur

这是在VB.NET MVC 3 Razor视图中,当返回JsonResult of success时触发。问题是,如果
data.Object.Status=='Completed',我想有条件地构建一个actionlink

我环顾四周,似乎没有任何东西适合解决这个问题。这是razor中actionlink的外观:

@Html.ActionLink("Completed(Print Cert)", "Ind_Cert", "Printing", New With {.firstName = currentItem.firstName, .lastname = currentItem.lastName, .classRef = currentItem.course_ref, .cNumber = currentItem.conf_number}, Nothing)
这就是javascript函数,它将实现这一点。目前它只放置
data.Object.Status的内容
。只有当
data.Object.Status!='已完成“

  function updateSuccess(data) {
    if (data.Success == true) {
        //we update the table's info
        var parent = linkObj.closest("tr");
        parent.find(".CompletedClass").html(data.Object.Status);
        //now we can close the dialog
        $('#updateDialog').dialog('close');
        //twitter type notification
        $('#commonMessage').html("Update Complete");
        $('#commonMessage').delay(400).slideDown(400).delay(3000).slideUp(400);
    }
    else {
        $("#update-message").html(data.ErrorMessage);
        $("#update-message").show();
    }
}
下面是我认为会起作用的东西,我仍在试图弄清楚,但这是一个粗略的标记

   function updateSuccess(data) {
    if (data.Success == true) {
        //we update the table's info
        var parent = linkObj.closest("tr");
        var d = parent.find(".CompletedClass");
        if (data.Object.Status == 'Completed') {
            d.html = @Html.ActionLink("Completed(Print Cert)", "Ind_Cert", "Printing", New With {.firstName = Model(0).firstName, .lastname = Model(0).lastName, .classRef = Model(0).Completed_Class, .cNumber = Model(0).conf_number}, Nothing) 
            }


        //now we can close the dialog
        $('#updateDialog').dialog('close');
        //twitter type notification
        $('#commonMessage').html("Update Complete");
        $('#commonMessage').delay(400).slideDown(400).delay(3000).slideUp(400);
    }
    else {
        $("#update-message").html(data.ErrorMessage);
        $("#update-message").show();
    }
}

您现在的建议应该有效,在分配HTML的代码中有一个输入错误,您可能知道,但是您将HTML添加到元素的方式是(您有一个无效的=符号):

假设是接受html的元素,否则,使用“text”函数

在任何情况下,我的建议是先生成HTML,然后将其隐藏在页面上(除非您有数千个HTML,否则会有安全问题)。然后让Javascript简单地显示元素:

 var parent = linkObj.closest("tr");
 var linkElement = parent.find(".mylinkelement-class");
    if (data.Object.Status == 'Completed') {
        linkElement.show();
        }
这将使您能够更好地分离Javascript和MVC代码

嗯,,
-Covo

您应该将代码更新为如下内容

d.html('@Html.ActionLink("Completed(Print Cert)", "Ind_Cert", "Printing", New With {.firstName = Model(0).firstName, .lastname = Model(0).lastName, .classRef = Model(0).Completed_Class, .cNumber = Model(0).conf_number}, Nothing)');
要使用jQuery分配html,应该使用
jQuery.html()


剃须刀
@Html.ActionLink
会将Html打印到页面上,为了不破坏您的Javascript,请将它们放在
d.Html(“@Html…”)

中,非常感谢,因为我对
=
Javascript真的很陌生,所以我永远不会学习
=/code>。但是,是的,这个视图显示了一个1对多的列表,因此我无法以良好的方式构建这些链接。是否可以使用javascript分配这些路由值
{.firstName=Model(0).firstName.lastname=Model(0).lastname.classRef=Model(0).Completed_Class.cNumber=Model(0).conf_number}
?我基本上需要从
data.Object.获取这些值。??
作为一个黑客,我使用javascript在razor视图中设置临时变量,然后使用
@variableName
获取这些值。我知道当我能够使用纯javascript时,这是一种混乱的方式。@skindep2366,可以从Json返回URL并直接在HTML上使用。还有其他方法可以将地图路由公开为输出客户端的大型Javascript对象。非常感谢。实际上,我只是在'd.html行中自己创建了
链接。
d.html('@Html.ActionLink("Completed(Print Cert)", "Ind_Cert", "Printing", New With {.firstName = Model(0).firstName, .lastname = Model(0).lastName, .classRef = Model(0).Completed_Class, .cNumber = Model(0).conf_number}, Nothing)');