MVC Jquery Ajax请求错误0x800a138f - JavaScript运行时错误:预期的对象

时间:2017-01-30 19:48:34

标签: c# jquery ajax asp.net-mvc html.dropdownlistfor

我一直在努力使用这个函数过去一小时了,我不知道出了什么问题,我有一个函数需要调用一个控制器动作并填充一个下拉列表,代码似乎失败就行了我声明了url,它以undefined失败并抛出上面的异常,任何想法如何解决这个问题,任何帮助都将非常感激。

这是我的下拉定义

// ...
ss, _ := cards.SubStack(1, 3) // ss now holds {Kc, 8d}
ss.Print() // Prints {Kc, 8d}
cards.Print() // Prints {5c, Kc, 8d} (assigned somewhere up in the code)
cards.DrawCards(ss) // Draws {Kc, 8d} from {5c, Kc, 8d}
cards.Print() // Prints {5c} - as expected
ss.Print() // Prints {8d, 8d} - ???

这是我的Jquery请求

<div class="form-group">
                                            @Html.LabelFor(m => m.Town, new { @class = "col-md-2 control-label" })
                                            <div class="col-md-10">

                                                @Html.DropDownList("Town", ViewBag.Town as SelectList)
                                            </div>
                                        </div>
                                        <div class="form-group">
                                            @Html.Label("Surburb", new { @class = "col-md-2 control-label" })
                                            <div class="col-md-10">
                                                @Html.DropDownList("Surburb", new SelectList(string.Empty, "Value", "Text"), "Please select a Surburb", new { style = "width:250px", @class = "dropdown1" })
                                            </div>
                                        </div>

2 个答案:

答案 0 :(得分:1)

它应该是Url.Action html辅助方法。

var url = '@Url.Action("GetSurburbs", "Account")';

假设此代码位于剃刀文件中。

这将执行Url.Action并设置返回值,这是GetSurburbs操作方法到url变量的正确相对路径。

将HTML帮助程序与外部JavaScript文件一起使用

上面的代码在剃刀文件中时会起作用,因为剃刀文件在服务器上执行。但是如果您不想在js代码中调用html辅助方法,则可以将此url值保留在视图标记中,并根据需要从js中读取。

@Html.DropDownList("Surburb", new List<SelectListItem>(), "Please select a Surburb", 
       new { style = "width:250px", @class = "dropdown1",
       data_url=Url.Action("GetSurburbs","Account") })

这将为您的SELECT元素生成data-url属性。现在只需读取此值并在您的JavaScript代码中使用。

var url = $("#Surburb").data("url");

答案 1 :(得分:1)

您错误地定义了网址。您需要使用@ Url.Action扩展

<script type="text/javascript" src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {

        $("#Town").change(function () {
            debugger;
            var url = '@Url.Action("GetSurburbs", "Account")';
            $.post(url,{id : $("#Town").val()}).done(function(data){
                alert('Success');
            }).fail(function(data){
                alert('failed');
            });
        })
    })

</script>