我有一个带有一个文本框和一个按钮的表单。在这里,我需要验证用户是否没有在文本框中输入无效数据,因此我在site.masters“head”中有一个函数,称为“onclick”事件。问题是,即使将“returnValue”变量设置为“False”,控制器操作仍在执行,我收到以下错误:
2>'/'应用程序中的服务器错误。参数字典包含参数的空条目 方法的非可空类型'System.int32'的'id' 'System.Web.Mvc.ActionResult AddStudent(System.DateTime)'中 'Student.Controllers.HomeController'。可选参数必须是a 引用类型,可空类型,或声明为可选 参数。参数名称:参数
控制器操作:
public ActionResult AddStudent(int id)
{
StudentDataContext student = new StudentDataContext ();
var std = student.Students.FirstOrDefault(s => s.StudentId == id);
std = new Models.Student() { StudentId = id};
student.Students.InsertOnSubmit(std);
student.SubmitChanges();
TempData["Message"] = "Student " + id + " is added";
return RedirectToAction("Index", TempData["Message"]);
}
以下是我在Site.Master中的javascript代码:
<script language="javascript">
function verifyInput() {
var returnValue = true;
if (document.getElementById('studentId').length != 10) {
returnValue = false;
alert("please enter a valid id")
Form1.studentId.value = "";
}
return returnValue;
}
</script>
以下是我的观点中的表单代码:
<form id="Form1" method="get" action="/Home/AddStudent/" runat="server">
<label for="id">
<br /><br /> Student ID:
</label>
<input type="text" name="studentId" id="studentId" maxlength=10/>
<input type="submit" value="Add Student" onclick="verifyInput()"/>
</form>
如何解决此问题?
提前致谢
答案 0 :(得分:4)
您需要return
returnValue。现在你把它设置为假,但没有做任何事情。
答案 1 :(得分:2)
将您的onclick事件更新为:
onclick="return verifyInput();"
或
onclick="verifyInput"
此外,对于表单验证,您应该在提交时检查,而不是单击。这样您就可以捕获表单提交的杂项时间,例如当他们点击输入按钮时。
它类似于:
<form ... onsubmit="return verifyInput();">
答案 2 :(得分:1)
此问题与您的路线有关。您的默认路由或此操作的路由是否与此类似?
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
如果没有,您需要在提交之前将studentId
附加到行动的最后。
可能是这样的:
if (document.getElementById('studentId').length != 10) {
...false...
} else {
document.getElementById('Form1').action = document.getElementById('Form1').action = document.getElementById('studentId').value;
}
此外,将maxlength设置为“10”而不是10,将其包装为引号可能会有所帮助。