Javascript有条件地构建mvc actionlink
这是在VB.NET MVC 3 Razor视图中,当返回JsonResult of success时触发。问题是,如果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
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)');