即使在函数中将returnValue设置为False后,也会执行控制器操作

时间:2012-03-08 17:26:41

标签: c# javascript html asp.net-mvc

我有一个带有一个文本框和一个按钮的表单。在这里,我需要验证用户是否没有在文本框中输入无效数据,因此我在site.masters“head”中有一个函数,称为“onclick”事件。问题是,即使将“returnValue”变量设置为“False”,控制器操作仍在执行,我收到以下错误:

  '/'应用程序中的服务器错误。      

参数字典包含参数的空条目   方法的非可空类型'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>

如何解决此问题?

提前致谢

3 个答案:

答案 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,将其包装为引号可能会有所帮助。