我正在编写一个MVC 4应用程序,我有一个javascript函数来支持几个级联下拉菜单。 javascript在js文件中,我正在尝试将它用于创建和编辑视图。它适用于创建视图,但在我的编辑视图中不起作用。我使用IE的开发人员工具查看了网络流量,并注意到create调用中的url是正确的,Controller / MyActionMethod。编辑调用的url是controller / edit / controller / MyActionMethod。
我目前正在使用默认路由配置,它似乎运行良好,所以我没有深入研究它。
有关为什么控制器/编辑/在编辑案例中预先添加到网址的想法? 知道怎么解决吗?
如果代码有用,我会发布代码,但我认为这可能是我对网址和路由不了解的内容。
由于
这是javascript
$(function () {
$.getJSON("ProfessionTypeList", function (data) {
var items = "<option>---------------------</option>";
$.each(data, function (i, professionType) {
items += "<option value='" + professionType.Value + "'>" + professionType.Text + "</option>";
});
$("#ProfessionTypeId").html(items);
})
});
答案 0 :(得分:0)
以下一行
$.getJSON("ProfessionTypeList",
将生成表单的网址
http://domain.com/Controller/ActionName/ProfessionTypeList
即。它会在网址末尾添加ProfessionTypeList
。
您应该尝试使显式网址完成路径。
在CSHTML
文件中,您可以使用@Url.Action("ProfessionTypeList")
答案 1 :(得分:0)
谢谢Comet!
以下是我做过的一些细节,以防万一。我敢肯定,有一种更清洁的方式不使用隐藏字段。不确定它是否重要。
我创建了隐藏字段,其中url为值。
@Html.Hidden("ProfessionTypeListUrl",@Url.Action("ProfessionTypeList", "IsolatedPersonDetailAtEvent"), new { id = "ProfessionTypeListUrl" })
@Html.Hidden("ProfessionSubTypeListUrl",@Url.Action("ProfessionSubTypeList", "IsolatedPersonDetailAtEvent"), new { id = "ProfessionSubTypeListUrl" })
然后我在我的js中查找了它们。
$(function () {
var actionUrl = $("#ProfessionTypeListUrl").attr('value');
$.getJSON(actionUrl, function (data) {
var items = "<option>---------------------</option>";
$.each(data, function (i, professionType) {
items += "<option value='" + professionType.Value + "'>" + professionType.Text + "</option>";
});
$("#ProfessionTypeId").html(items);
})
});
$("#ProfessionTypeId").change(function ()
{
**var actionUrl = $("#ProfessionSubTypeListUrl").attr('value');**
$.getJSON(actionUrl+"/" + $("#ProfessionTypeId > option:selected").attr("value"), function (data) {
var items = "<option>---------------------</option>";
$.each(data, function (i, subType) {
items += "<option value='" + subType.Value + "'>" + subType.Text + "</option>";
});
$("#ProfessionSubTypeId").html(items);
});
});
</script>