Значения модели нулевые - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь отправить некоторые значения формы, но они кажутся пустыми. Я не могу понять, почему. Я уверен, что это простое решение или просто то, что я пропустил. Может кто-нибудь, пожалуйста, укажите мне в правильном направлении.

@page
@model WebApp.Pages.LoginModel
@{
    ViewBag.Title = "Login";
}
<h2>
    Logins
</h2>
@using (Html.BeginForm())
{

    @Html.ValidationSummary(true)

    <div style="border: solid 1px #ccc; padding: 30px 0 30px 30px; border-radius: 5px;
        width: 325px; margin: auto; display: table;">
        <table>
            <tr>
                <td valign="top">
                    @Html.LabelFor(model => model.UserName)
                </td>
                <td>
                    @Html.EditorFor(model => model.UserName)
                    <div style="height: 20px;">
                        @Html.ValidationMessageFor(model => model.UserName)
                </div>
            </td>
        </tr>
        <tr>
            <td valign="top">
                @Html.LabelFor(model => model.Password)
            </td>
            <td>
                @Html.EditorFor(model => model.Password)
                <div style="height: 20px;">
                    @Html.ValidationMessageFor(model => model.Password)
            </div>
        </td>
    </tr>
    <tr>
        <td></td>
        <td>
            <input type="submit" value="Login" />
        </td>
    </tr>
</table>
</div>
}

Вот моя страничка

namespace WebApp.Pages
{
    public class LoginModel : PageModel
    {

        [Required(ErrorMessage = "Please enter user name.")]
        [Display(Name = "User Name")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "Please enter password.")]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }


        private SqlEntreprenörData<Entreprenör> _repository;

        public LoginModel(SqlEntreprenörData<Entreprenör> repository)
        {
            _repository = repository;
        }

        [HttpPost]
        public ActionResult OnPost()
        {
            if (ModelState.IsValid)
            {
                if(_repository.Login(UserName, Password))
                {

                   return RedirectToPage("/Admin/Avbokningar");
                }
            }
            return Page();
        }
    }
}

А вот мой метод, который получает пользователя из БД. Здесь имя пользователя и пароль, отправленные с бритвенной страницы, всегда имеют значение null?

public bool Login(string username, string password)
{
   var user = (from userlist in _dbContext.Entreprenör
                where userlist.Namn == username && userlist.Password == password
                select new
                {
                    userlist.Id,
                    userlist.Namn
                }).ToList();
    if (user.FirstOrDefault() != null)
    {
        return true;
    }
    else
    {
        return false;
    }

}

1 Ответ

0 голосов
/ 08 января 2019

[BindProperty] атрибут используется в Razor Pages для привязки значений со страницы к свойствам PageModel. Попробуйте следующие изменения

    [BindProperty]
    [Required(ErrorMessage = "Please enter user name.")]
    [Display(Name = "User Name")]
    public string UserName { get; set; }

    [BindProperty]
    [Required(ErrorMessage = "Please enter password.")]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

Начиная с версии 2.1 ASP.NET Core, вы можете добавить новый атрибут [BindProperties] к классу PageModel вместо применения [BindPRoperty] к отдельным свойствам, что приводит к все открытые свойства в PageModel, участвующие в привязке модели:

[BindProperties]
public class LoginModel : PageModel
{

    [Required(ErrorMessage = "Please enter user name.")]
    [Display(Name = "User Name")]
    public string UserName { get; set; }

    [Required(ErrorMessage = "Please enter password.")]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
...