根据下拉列表项目选择更改mvc中的视图

时间:2016-03-04 20:12:43

标签: javascript c# asp.net-mvc

我在视图上有一个下拉列表:

<p>
@Html.DropDownList("Status", new List<SelectListItem>
    {
    new SelectListItem{ Text = "Show Active", Value = "0" },
    new SelectListItem{ Text = "Show Deleted", Value = "1" }},
    new
         {
             onchange = @"
        var form = document.forms[0];
        form.action='deletedDistricts';
        form.submit();"
         })

我将控制器操作称为:

[HttpPost]
    [ActionName("deletedDistricts")]
    public ActionResult deletedDistricts()
    {
        var d = hc.deletedDistricts.ToList();
        return View(d);
    }

但是JavaScript给出了运行时错误:

0x800a138f - JavaScript运行时错误:无法设置未定义或空引用的属性“action”

我不擅长JavaScript。知道为什么这段代码抛出Null引用?

2 个答案:

答案 0 :(得分:1)

好吧,我无法看到你有一个与下拉列表关联的表单,请确保它包含在:

@using(Html.BeginForm("deletedDistricts", controllerName, FormMethod.Post)) {
    // drowpdown here
}

然后移除

form.action='deletedDistricts';

conrollerName 应该是控制器的名称字符串。

答案 1 :(得分:1)

让我们再次阅读您的错误:

  

0x800a138f - JavaScript运行时错误:无法设置属性“action”   未定义或空引用

好的,现在让我们再次阅读您的代码,看看您尝试设置action属性的位置。看起来就是在这里发生的事情:

form.action='deletedDistricts';

好的,所以在这个阶段似乎未定义form实例。因此,您希望看到明显的下一步是这个form实例的来源。你会发现你的这行代码并不会感到惊讶:

var form = document.forms[0];

很酷,您似乎正在尝试检索DOM中的第一个<form>元素。但你有这样的元素吗?您是否曾使用Html.BeginForm助手呈现HTML表单?回答这些简单的问题肯定会让你走上正轨。不要犹豫,检查您在浏览器中生成的标记。我相信这可以帮助你弄清楚缺失的部分。

相关问题