Я искал и пытался решить проблему, с которой я сталкиваюсь прямо сейчас. Я являюсь моделью пользователя, и я хочу аутентифицировать пользователя с помощью пользовательского authentication.I'm не видя никаких ошибок при подаче form.But я могу видеть исключение в выходе window.Here моя модель класса:Первое случайное исключение типа «Исключение System.NullReferenceException» произошло в пользовательской аутентификации Unknown Module-mvc
public class UserInfo
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required(ErrorMessage="User Name is required")]
[Display(Name="User Name")]
[MaxLength(20, ErrorMessage = "The Maximum length allowed is 20 characters")]
[MinLength(4, ErrorMessage = "The Minimum length is 3 characters")]
public string Name { get; set; }
[Required(ErrorMessage = "Email is required")]
[EmailAddress(ErrorMessage = "Enter a proper email address")]
[MaxLength(30, ErrorMessage = "Maximum length allowed for an email is 30 characters")]
public string Email { get; set; }
[Required(ErrorMessage = "Password is required")]
[Display(Name = "Password")]
[DataType(DataType.Password)]
public string Pass { get; set; }
[Required(ErrorMessage = "Confirm your password")]
[Display(Name = "Confirm Password")]
[Compare("Pass", ErrorMessage = "Passwords should match")]
[DataType(DataType.Password)]
[NotMapped]
public string Confirm { get; set; }
}
Вот мой метод действия для входа в систему в моем контроллере:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(UserInfo user)
{
if (ModelState.IsValid)
{
string EncryptPass;
EncryptPass = Crypto.SHA256(user.Pass);
Console.WriteLine(EncryptPass);
var i = db.Database.ExecuteSqlCommand("select count(*)
from userinfos where username = {0}", user.Name);
if (i > 0)
{
var j = db.Database.ExecuteSqlCommand("select
count(*) from userinfos where pass = {0}", EncryptPass);
if (j > 0)
{
Session["User"] = user.Name;
FormsAuthentication.SetAuthCookie(user.Name,
false);
RedirectToAction("Create", "Ministry");
}
else
{
RedirectToAction("Login");
ModelState.AddModelError(user.Pass, "Password is
incorrect");
}
}
else
{
RedirectToAction("Login");
ModelState.AddModelError(user.Name, "Our records
shows
that no account exists on your name");
}
}
return View();
}
Мой взгляд:
@model ChurchWebsite.Models.UserInfo
@{
ViewBag.Title = "Login";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Login</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend></legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Pass)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Pass)
@Html.ValidationMessageFor(model => model.Pass)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Какая строка выдает ошибку? И 'ModelState' всегда будет недействительным из-за вашего' [Compare («Pass», ErrorMessage = «Пароли должны совпадать»)] '. И в чем смысл добавления ошибок ModelState после вызова RedirectToAction(); '? –
Должен ли я рассмотреть возможность создания отдельного контроллера для входа и записи ActionMethod для входа в этот контроллер? –