用json填充下拉列表

时间:2013-06-17 14:29:14

标签: javascript ajax asp.net-mvc json

我正在尝试一些东西并使用json和javascript填充下拉列表由于某种原因我在尝试填充时遇到控制台错误

我正在使用Scripts/jquery-2.0.2.js

这是错误:

无法加载资源:服务器响应状态为404(未找到)

  

POST // localhost:9819 / Home / Home / Test 404(Not Found)   jquery-2.0.2.js:7858发送jquery-2.0.2.js:7858 jQuery.extend.ajax   jquery-2.0.2.js:7314 RetrieveData索引:45(匿名函数)   索引:64 jQuery.event.dispatch jquery-2.0.2.js:4692 elemData.handle

这是查看代码:

   <script>
    $(document).ready(function () {
        var Load = false;
        function RetrieveData() {
            if (Load == false) {
                Load = true;
                $.ajax({
                    url: <%= Url.Action("Test", "Home") %>
                    data: "{}",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json",
                    success: function (data) {
                        $("#selectMe").html(data);
                        Load = false;
                    },
                    error: function (data, status, jqXHR) {
                        alert("Error: " + data);
                        Load = false;
                    }
                });
            }
        }

        $(document).on("click", "#test", function () {
            RetrieveData();
        });
    });
</script>

<input type="submit" id="test" />
    <select id="selectMe"></select>

控制器:

public string GenerateHTMLforDropDownList(Dictionary<string, string> myData)
    {
        string HTMLString = "";

        foreach (KeyValuePair<string, string> k in myData)
        {
            HTMLString += "<option value=\"" + k.Key + "\">" + k.Value + "</option>";
        }

        return HTMLString;
    }

    [HttpPost]
    public JsonResult Test()
    {
        Dictionary<string, string> myData = new Dictionary<string, string>();

        myData.Add("0", "Mike");
        myData.Add("1", "Mark");
        myData.Add("2", "Karl");
        myData.Add("3", "Rhona");

        return Json(GenerateHTMLforDropDownList(myData), JsonRequestBehavior.AllowGet);
    }

任何有关如何解决此问题的帮助

3 个答案:

答案 0 :(得分:1)

如错误所示,找不到资源。查看错误中的URL:

http://localhost:9819/Home/Home/Test

假设您没有做更多自定义操作,如果您在Test控制器上执行了Home操作,则 应该

http://localhost:9819/Home/Test

另请注意您如何在代码中指定网址:

url: "Home/Test"

如果您当前位于http://localhost:9819/Home/Anything,则该相对网址表示在当前资源的“子目录”(使用松散的单词)中查找名为Test的资源。所以这是你的问题。

不要像这样手动指定URL,而是使用MVC中的Url.Action方法。像这样:

url: '@Url.Action("Test", "Home")'

这将从服务器端代码生成一个完全限定的URL,无论您当前的上下文在哪里,因此您不必根据当前URL或类似的内容进行调整。

答案 1 :(得分:0)

我还没有在MVC中这样做,但是我已经在Web窗体中做过无数次了,看起来你的URL可能就是问题......

<强> //本地主机:9819 /家庭/家庭/测试

在您的ajax调用中,您应该调整此行...

url: "Home/Test"

让它看起来像......

url: <%= Page.ResolveUrl("~/Home/Test.asmx") %>

很抱歉,如果这不是MVC的基础。

答案 2 :(得分:-1)

您需要将按钮类型更改为“按钮”而不是提交,因为这是ajax调用