在我的一个视图中,我有一个帮助链接,显示一个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解析它。
有没有理由停止解决?
答案 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代码中读取这些字段。