0

这是在 VB.NET MVC 3 Razor 视图中,并在返回成功的 JsonResult 时触发。问题是我想有条件地建立一个动作链接,如果data.Object.Status == 'Completed';

我环顾四周,似乎没有什么适合解决这个问题。这是 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 != 'Completed';

  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();
    }
}
4

2 回答 2

1

您应该将代码更新为这样的

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().

Razor@Html.ActionLink会将 HTML 打印到页面上,以免破坏您的 Javascript,将它们放在引号内d.html('@Html...')

于 2013-09-07T03:55:46.150 回答
1

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

d.html (@Html.ActionLink("Completed(Print Cert)", "Ind_Cert", ....) 

假设是一个接受 html 的元素,否则,使用“文本”函数。

无论如何,我的建议是事先生成 HTML,但将其隐藏在页面上(除非您有数千个,否则存在安全问题)。然后你只需让你的 Javascript 简单地显示元素:

 var parent = linkObj.closest("tr");
 var linkElement = parent.find(".mylinkelement-class");
    if (data.Object.Status == 'Completed') {
        linkElement.show();
        }

这应该会给您带来更好地分离 Javascript 和 MVC 代码的好处。

HTH,-科沃

于 2013-09-07T03:48:00.837 回答