0

我正在尝试扩展来自MattHidinger.com的示例,以将弹出对话框添加到 MVC 站点。

使用他网站上的代码...

<script type="text/javascript">

$.ajaxSetup({ cache: false });

$(document).ready(function () {
    $(".openDialog").live("click", function (e) {
        e.preventDefault();

        $("<div></div>")
            .addClass("dialog")
            .attr("id", $(this).attr("data-dialog-id"))
            .appendTo("body")
            .dialog({
                title: $(this).attr("data-dialog-title"),
                close: function () { $(this).remove() },
                modal: true,
                width: 700,
                height: 350
            })
                .load(this.href);
        });

        $(".close").live("click", function (e) {
            e.preventDefault();
            $(this).closest(".dialog").dialog("close");
        });
    });
</script>

和一个 Html.ActionLink

@Html.ActionLink("Delete via actionlink", "Delete", "CostModel"
, new { id = item.HighlightReportID }
, new { @class = "openDialog", data_dialog_id = "dialog", data_dialog_title =
 string.Format("Delete {0}", item.DisplayIdentifier) })

我可以呈现一个锚标记,单击该标记会打开一个 UI 对话框。

<a class="openDialog" data-dialog-id="dialog" data-dialog-title="Delete report for Nov 12" href="/CostModel/Delete/162">Delete via actionlink</a>

但!

如果我使用相同的识别结构手动将锚标记添加到页面,它会失败。

<a class="openDialog" data_dialog_id="dialog" data_dialog_title="Delete report for Nov 12" href="/CostModel/Delete/162">Delete via manual anchor tag</a>

与手动创建的标签相比,MVC 生成的 Anchor 标签会起作用吗?

警告。显然,我不会手动将标签添加到 MVC 中的页面。我首先尝试使用在锚标记内生成图像的 ImageLink 助手,但它也失败了,所以回到最初的原则,我尝试了手动方法,当它失败时非常困惑!

编辑 1

这是页面中的代码,注意我尝试将 data_dialog_id 设置为相同和不同,同时添加和单独添加,没有区别,只有 ActionLink 会被 JQuery 拾取。

@Html.ActionLink("Delete via actionlink", "Delete", "CostModel"
                    , new { id = item.HighlightReportID }
                    , new { @class = "openDialog", data_dialog_id = "dialog1", data_dialog_title = string.Format("Delete {0}", item.DisplayIdentifier) })
<a class="openDialog"
                data_dialog_id="dialog2"
                data_dialog_title="@string.Format("Delete {0}", item.DisplayIdentifier)"
                href="/CostModel/Delete/@item.HighlightReportID">Delete via manual anchor tag</a>

这些是呈现的两个标签

<a class="openDialog" data-dialog-id="dialog1" data-dialog-title="Delete report for Dec 12" href="/CostModel/Delete/212">Delete via actionlink</a>
<a class="openDialog" data_dialog_id="dialog2" data_dialog_title="Delete report for Dec 12" href="/CostModel/Delete/212">Delete via manual anchor tag</a>

就我的眼睛所见,它们是相同的,但 jquery 只会拾取第一个(dialog1)。

4

1 回答 1

2

绝对没有理由硬编码标记会失败。Html.ActionLink 助手所做的只是生成一个 HTML 锚点,这是客户端脚本唯一可见的东西。我猜你的问题出在其他地方。例如,您可能放置了与助手生成的标记不同的标记。想到的一件事是href您硬编码到不存在的操作的属性。不要忘记,如果您将应用程序部署在 IIS 的虚拟目录中,如果您将 url 硬编码(而不是使用帮助程序)/CostModel/Delete/162可能会失败,因为正确的 url 现在是/myappname/CostModel/Delete/162. 这就是为什么您永远不应该在 ASP.NET MVC 应用程序中硬编码 url 的原因之一。

您可以使用 javascript 调试工具(例如 FireBug 或 Chrome Developer 工具栏)来检查您的代码并查看潜在问题。还要在您的控制台中查看可能的错误。

于 2013-03-17T12:13:43.947 回答