MVC帮助链接Url.Action不再解析

时间:2016-12-16 18:22:29

标签: jquery asp.net-mvc asp.net-mvc-4

在我的一个视图中,我有一个帮助链接,显示一个jquery ui对话框,描述该字段的用途。

我的观点:

@using (Html.BeginForm("OptionalFields", "Home"))
{
    @Html.HiddenFor(m => m.ConfigID)
    @Html.LabelFor(m => m.CampaignName)
    @Html.TextBoxFor(m => m.CampaignName) <a href="#" class="helplinkcampaign">help</a>
    @Html.LabelFor(m => m.LeadStatus)
    @Html.TextBoxFor(m => m.LeadStatus) <a href="#" class="helplinkstatus">help</a>
    @Html.LabelFor(m => m.UserOwnerName)
    @Html.TextBoxFor(m => m.UserOwnerName) <a href="#" class="helplinkowner">help</a>
    <p><input type="submit" id="optionalfields" value="Save" /></p>
}

我在上面的链接标记中为每个类都有一个jquery事件处理程序。例如:

$(document).on("click", ".helplinkcampaign", function () {
    var url = '@Url.Action("Campaign", "Home")';
    $("#divPopup").dialog('option', 'title', 'Campaign Name Help');
    $.get(url, function (data) {
        $("#divPopup").html(data);
        $("#divPopup").dialog("open");
    });
});

如您所见,我将URL解析为控制器actionresult并下载该视图的内容,并在jquery ui对话框中显示内容。

此页面正在进行中,但截至昨天已经停止,今天已停止。我得到的错误是:

Failed to load resource: the server responded with a status of 404 (Not Found)

控制台旁边的链接是

http://localhost:12345/Home/@Url.Action(%22Campaign%22,%20%22Home%22)

而不是

http://localhost:12345/Home/Campaign

我知道在这种情况下我可以手动将url变量设置为campaign,但我更喜欢让MVC解析它。

有没有理由停止解决?

2 个答案:

答案 0 :(得分:3)

正如 @ Y.Tceretian 指出的那样,可能是你将js代码移动到一个单独的js文件,因此如果它不在视图中而是在js文件中,则不会执行剃刀代码。 / p>

你可以做的是,你可以使用数据属性来设置网址,然后在点击事件中读取它,如下所示:

@Html.TextBoxFor(m => m.CampaignName) 
<a href="#" data-url="@Url.Action("Campaign", "Home")" class="helplinkcampaign" >help</a>

然后在你的jquery click事件处理程序中读取属性值:

$(document).on("click", ".helplinkcampaign", function () {
    var url = $(this).data("url"); // note this
    $("#divPopup").dialog('option', 'title', 'Campaign Name Help');
    $.get(url, function (data) {
        $("#divPopup").html(data);
        $("#divPopup").dialog("open");
    });
});

答案 1 :(得分:2)

看起来你将Javascript片段移动到没有通过Razor引擎的单独文件。 作为一种变通方法,您可以在View中解析url并放入一些隐藏字段,然后在Javascript代码中读取这些字段。