Нужна помощь с привязкой модели formcollection - PullRequest
0 голосов
/ 05 декабря 2009

Я пытаюсь проверить некоторые поля формы, но всегда возникают ошибки в помощниках формы HTML. Это как-то связано с привязкой модели, но я не могу заставить ее работать.

Что происходит ниже, я получаю значения формы из формы, используя объект FormsCollection, затем я передаю извлеченные значения в слой USerSErvice и проверяю их. Когда я нажимаю на форму, она падает на Html.Helpers

Спасибо!

[In UserController]

 [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(FormCollection formValues)
    {
        // Get form values
        string username = formValues["Username"];
        string email = formValues["Email"];
        string confirmEmail = formValues["ConfirmEmail"];
        string password = formValues["Password"];
        string confirmPassword = formValues["ConfirmPassword"];
        bool themeRole = Convert.ToBoolean(formValues["ThemeRole"]);

        bool valid = _service.CreateUser(username, email, confirmEmail, password, confirmPassword, themeRole);

        // If user was created then
        if (valid)
        {
            ViewData["Success"] = true;
        }
        else
        {
            ViewData["Success"] = false;
        }

        return View();
    }

[UserService]

регион Создать пользователя

    /// <summary>
    /// Create User
    /// </summary>
    /// <param name="user"></param>
    /// <returns></returns>
    public bool CreateUser(string username, string email, string confirmEmail, string password, string confirmPassword, bool themeRole)
    {           
        // validate values from form
        if (String.IsNullOrEmpty(username) == true)
        {
            _modelState.AddModelError("Username", "Please provide a username");
        }

        if (String.IsNullOrEmpty(password) == true)
        {
            _modelState.AddModelError("Password", "Please provide a password");
        }
        else if (password.Length < 6)
        {
            _modelState.AddModelError("Password", "Minimum length for password is 6 characters");
        }

        if (String.IsNullOrEmpty(confirmPassword) == true)
        {
            _modelState.AddModelError("ConfirmPassword", "Please confirm your password in the Confirm Password field");
        }
        else if (!confirmPassword.Equals(password) == true)
        {
            _modelState.AddModelError("ConfirmPassword", "Passwords do not match");
        }

        if (String.IsNullOrEmpty(email) == true)
        {
            _modelState.AddModelError("Email", "Please provide an email address");
        }

        if (String.IsNullOrEmpty(confirmEmail) == true)
        {
            _modelState.AddModelError("ConfirmEmail", "Please confirm your email addres in the confirm email field");
        }
        else if (!confirmEmail.Equals(email) == true)
        {
            _modelState.AddModelError("ConfirmEmail", "Emails do not match");
        }

        // if all is good - create account otherwise it fails
        if (_modelState.IsValid == true)
        {
            // Encode password
            byte[] generatedSalt = Utility.GeneratePasswordSalt(new byte[16]);
            string saltString = Encoding.Unicode.GetString(generatedSalt);
            string passwordSalt = Convert.ToBase64String(generatedSalt);
            string newHashedPassword = Utility.EncodePassword(password, passwordSalt);

            // Update user object with new user information
            User newUser = new User();
            newUser.Username = username;
            newUser.Password = newHashedPassword;
            newUser.PasswordSalt = passwordSalt;
            newUser.Email = email;
            newUser.Role = themeRole;

            // Add user
            _repository.AddUser(newUser);

            return true;
        }
        else
        {
            return false;
        }
    }

[Сообщение об ошибке]

 Object reference not set to an instance of an object.

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

Ошибка источника:

Строка 22:

Строка 23: имя пользователя: Строка 24: <% = Html.TextBox ("Имя пользователя")%> Строка 25:

Строка 26:

1 Ответ

2 голосов
/ 05 декабря 2009

Если вы не хотите использовать встроенную привязку модели, то для использования проверки с использованием ModelState.AddModelError вам также необходимо указать значение модели. В вашем слое обслуживания вам потребуются следующие 2 строки для каждого свойства.

_modelState.AddModelError("Username", "Please provide a username");
_modelState.SetModelError("Username", ValueProvider["Username"]);

Посмотрите также на эти ссылки:

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