2016-12-16 73 views
1

在我的一個視圖中,我有一個幫助鏈接,它顯示了一個jQuery UI對話框,描述了該字段的用途。MVC幫助鏈接Url.Action不再解決

我的觀點:

@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用戶界面對話框的內容。

此頁面正在進行中,但這是昨天和今天已停止的工作。我得到的錯誤是:

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變量競選在這種情況下,但我更願意讓MVC解決它。

這有什麼理由停止解決?

回答

2

它看起來像你移動Javascript的一塊單獨的文件,不通過剃刀引擎。 作爲一種解決方法,您可以在View中解析url並放入某個隱藏字段,然後在Javascript代碼中讀取這些字段。

+0

是的,看起來你是對的。 – andrewb

3

由於@ Y.Tceretian尖銳,可能是你把js代碼移動到一個單獨的js文件,所以如果它不在視圖中,但是在js文件中,剃鬚刀代碼將不會被執行。

你可以做的是什麼,你可以使用數據屬性來設置的URL,然後在該會是這樣的單擊事件閱讀:

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

和thenin您的jQuery的單擊事件處理程序讀取屬性值:

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