Asp.net MVC 4 getJson工作用于创建,但不用于编辑。似乎在编辑中有一个奇怪的网址

时间:2013-09-04 04:19:19

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

我正在编写一个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);
   })
});

2 个答案:

答案 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>