действие контроллера выполняется даже после установки returnValue в False в функции - PullRequest
0 голосов
/ 08 марта 2012

У меня есть форма с одним текстовым полем и одной кнопкой. Здесь мне нужно проверить, если пользователи не вводят недопустимые данные в текстовое поле, поэтому в site.masters есть функция head, которая называется событием onclick. Проблема в том, что даже после установки переменной «returnValue» в значение «False» выполняется действие контроллера, и я получаю следующую ошибку:

Ошибка сервера в приложении '/'.

Словарь параметров содержит пустую запись для параметра 'id' не обнуляемого типа 'System.int32' для метода System.Web.Mvc.ActionResult AddStudent (System.DateTime) в 'Student.Controllers.HomeController. Необязательный параметр должен быть ссылочный тип, обнуляемый тип или объявленный как необязательный параметр. Имя параметра: параметры

Действие контроллера:

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"]);

       }

Вот мой код 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 ]

4 голосов
/ 08 марта 2012

Вам нужно return returnValue.Прямо сейчас вы устанавливаете значение false, но ничего не делаете с ним.

2 голосов
/ 08 марта 2012

Обновите событие onclick:

onclick="return verifyInput();"

или

onclick="verifyInput"

Кроме того, для проверки формы вы должны проверять это при отправке, а не по щелчку.Таким образом вы фиксируете разные моменты времени, которые отправляет форма, например, когда они нажимают кнопку ввода.

Это будет что-то похожее на:

<form ... onsubmit="return verifyInput();">
1 голос
/ 08 марта 2012

Эта проблема связана с вашими маршрутами.Ваш маршрут по умолчанию или маршрут для этого действия выглядят примерно так?

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;
}

Кроме того, это может помочь установить максимальную длину как "10" вместо 10, заключив ее в кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...