2015-04-05 3 views
0

Я делаю Вход на свой сайт, но его не работает. Регистрация работает успешно. Вот мой метод действияКак сделать вход в asp.net MVC4?

[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(); 
     } 

это RECIVED значение из поля зрения, что я проверил с помощью 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> 

Другая проблема заключается в его не показывают точки в поле пароля

я установил datatype.password в метаданных. он работает прямо в режиме регистрации.

Вот модель

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace Final_Year_Project.Models 
{ 
    [MetadataType(typeof(RegistrationMetaData)) ] 
    public partial class Registration 
    { 

    } 

    public class RegistrationMetaData 
    { 

     public int Id { get; set; } 
     [Required(ErrorMessage = "Please provide First name.", AllowEmptyStrings = false)] 
     [DataType(DataType.Text)] 
     public string Firstname { get; set; } 
     [Required(ErrorMessage = "Please provide Last name.", AllowEmptyStrings = false)] 
     [DataType(DataType.Text)] 
     public string Lastname { get; set; } 
     [Required(ErrorMessage = "Please provide User name.", AllowEmptyStrings = false)] 
     [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; } 
     //[NotMapped] 
     //[CompareAttribute("Password,",ErrorMessage="Confirm Password does not match")] 
     //[DataType(DataType.Password)] 
     //public string ConfirmPassword { get; set; } 
     [Required(ErrorMessage = "Please provide Email.", AllowEmptyStrings = false)] 
     [DataType(DataType.EmailAddress)] 
     public string Email { get; set; } 
     //[Required(ErrorMessage = "Please provide Date of birth.", AllowEmptyStrings = false)] 
     //[DataType(DataType.Date)] 
     //[DisplayFormat(DataFormatString = "")] 
     //public DateTime? DOB { get; set; } 
     [Required(ErrorMessage = "Please provide Gender.", AllowEmptyStrings = false)] 
     [DataType(DataType.Text)] 
     public string Gender { get; set; } 

    } 
} 
+0

Это происходит потому, что модели не находится в правильном состоянии. Можете ли вы опубликовать его? –

+0

Я опубликовал модель. –

ответ

0

Вы должны использовать различные ViewModel для вашей формы входа в систему, так как 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(); 
} 
+0

его работы. Спасибо большое .... –

Смежные вопросы