Asp.net mvc 如何在asp.net MVC4中登录?

Asp.net mvc 如何在asp.net MVC4中登录?,asp.net-mvc,Asp.net Mvc,我正在登录我的网站,但它不工作。 注册成功。 这是我的行动方法 [HttpGet] public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(Registration U) { Response.Write(U.Username); // it

我正在登录我的网站,但它不工作。 注册成功。 这是我的行动方法

[HttpGet]
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Index(Registration U)
        {
            Response.Write(U.Username); // it print the name but not go inside the condition
            if (ModelState.IsValid)
            {                        // not come here why?
                Response.Write("inin");
                ModelState.Clear();
                using (Database1Entities db = new Database1Entities())
                {
                    var user = db.Registrations.Where(a => a.Username.Equals(U.Username) && a.Password.Equals(U.Password)).FirstOrDefault();
                    if (user != null)
                    {
                        Session["LoggedUserID"] = U.Id.ToString();
                        Session["LoggedUsername"] = U.Username.ToString();
                        return RedirectToAction("Update");
                    }
                }
            }
            return View();
        }
它收到了我使用response.write(U.username)检查的视图中的值 但是,如果(modelstate.isvalid),为什么它不在条件中出现呢

这是我的看法

@model Final_Year_Project.Models.RegistrationMetaData

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>

        @using (Html.BeginForm("Index", "Home", FormMethod.Post))
        {
            @Html.AntiForgeryToken()
            @Html.ValidationSummary(true)
            @Html.LabelFor(a=>a.Username)
            @Html.TextBoxFor(a=>a.Username)
            @Html.ValidationMessageFor(a=>a.Username)
            <br>
             @Html.LabelFor(a=>a.Password)
            @Html.TextBoxFor(a=>a.Password)
            @Html.ValidationMessageFor(a=>a.Password)

            <br>
            <input type="submit" value="Login">
        }



 @section Scripts{
        @Scripts.Render("~/bundles/jqueryval")}


    </div>


</body>
</html>

您应该为您的登录表单使用不同的视图模型,因为
RegistrationMetaData
的必填字段比您在登录中发布的字段多(如
FirstName
LastName

为登录创建新模型并使用它:

public class LoginMetaData
{        
    [DataType(DataType.Text)]
    [Remote("IsAvailable", "Home", ErrorMessage = "This User name is already exist")]
    public string Username { get; set; }
    [Required(ErrorMessage = "Please provide Password.", AllowEmptyStrings = false)]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}
然后在您的视图中使用它:

@model LoginMetaData
在控制器中:

[HttpPost]
public ActionResult Index(LoginMetaData U)
{
    Response.Write(U.Username); // it print the name but not go inside the condition
    if (ModelState.IsValid)
    {                        // not come here why?
        Response.Write("inin");
        ModelState.Clear();
        using (Database1Entities db = new Database1Entities())
        {
            var user = db.Registrations.Where(a => a.Username.Equals(U.Username) && a.Password.Equals(U.Password)).FirstOrDefault();
            if (user != null)
            {
                Session["LoggedUserID"] = U.Id.ToString();
                Session["LoggedUsername"] = U.Username.ToString();
                return RedirectToAction("Update");
            }
        }
    }
    return View();
}

这是因为您的模型未处于有效状态。你能把它寄出去吗?我已经把模型寄出去了。
[HttpPost]
public ActionResult Index(LoginMetaData U)
{
    Response.Write(U.Username); // it print the name but not go inside the condition
    if (ModelState.IsValid)
    {                        // not come here why?
        Response.Write("inin");
        ModelState.Clear();
        using (Database1Entities db = new Database1Entities())
        {
            var user = db.Registrations.Where(a => a.Username.Equals(U.Username) && a.Password.Equals(U.Password)).FirstOrDefault();
            if (user != null)
            {
                Session["LoggedUserID"] = U.Id.ToString();
                Session["LoggedUsername"] = U.Username.ToString();
                return RedirectToAction("Update");
            }
        }
    }
    return View();
}