2016-12-16 72 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"); 
    }); 
});