我在视图上有一个下拉列表:
<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引用?
答案 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表单?回答这些简单的问题肯定会让你走上正轨。不要犹豫,检查您在浏览器中生成的标记。我相信这可以帮助你弄清楚缺失的部分。