После вызова объекта со стороны клиента я получил код ошибки CS1061 - PullRequest
0 голосов
/ 07 октября 2018

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS1061 «LoginModel» не содержит определения «Model», и доступный метод расширения «Model», принимающий первый аргумент типа «LoginModel», не может быть найден (являютсяВы пропустили директиву использования или ссылку на сборку?) Lb_Clinics C: \ Users \ dibem \ source \ repos \ Clinics \ Lb_Clinics \ Pages \ Login.cshtml 25 Active

, которая была ошибкой при попыткесвяжите мое свойство объекта с текстовыми полями (чтобы получить хорошую проверку).

Я делаю как обычно следующие шаги:

  1. Создание объекта с его свойствами (пример: account)
  2. Создание класса модели, наследуемого от DbContext
  3. добавить DbContext к службе
  4. создать интерфейс, который принимает только имена методов
  5. реализовать эти методы в классе репозитория (пример: repo_Account)
  6. Создать APage Razor Чем создать обычные методы OnPost OnGet OnPut
  7. сделать форму с методом (post, put)

Я что-то упустил ??Я пытался понять эту ошибку, я искал в Microsoft, он говорит, что это происходит, когда вы вызываете метод, который не существует Код ошибки CS1061

Вот моя реализация: 1_Entity:

public class Account
    {
        public int AccountID { get; set; }

        [Required]
        [MinLength(3)]
        [MaxLength(100)]
        [DataType(DataType.EmailAddress)]
        public string UserName { get; set; }

        [Required]
        [MinLength(3)]
        [MaxLength(100)]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        public bool Verified { get; set; }


    }

2 _ DbContext:

   public class ClinicalDbContext:DbContext
    {
        public ClinicalDbContext(DbContextOptions options ):base(options)
        {
            Database.EnsureCreated();
        }
        public DbSet<Account> Accounts { get; set; }
    }

3- Конфигурация услуг

a-

 public Startup(IConfiguration configuration,IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder().
                SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json")
                .AddJsonFile("appsettings.development.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build() ;
        }

b-

services.AddDbContext<ClinicalDbContext>(option => {
                option.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
            });

4- Интерфейс, который назначает методы

     public interface IAccount
        {
            //AddNewAccount ChangePassword ChangeEmailAddress Verify_Login

            void AddNewAccount(Account account);
            void ChangePassword(int AccountID, string Password);
            void ChangeEmailAddress(int AccountID, string UserName);
            int Verify_login(string UserName, string Password);
        }

6 - вызов интерфейса для привязки его к событиям IAction в cshtml.cs (Login.cshtml.cs)

  public class LoginModel : PageModel
    {

        private readonly IAccount _account;
        public LoginModel(IAccount account)
        {
            _account = account;
        }
        [BindProperty]
        public Account Account { get; set; }

        public IActionResult OnPostAsync(Account Account)
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }
            int ID = _account.Verify_login(Account.UserName, Account.Password);
            if (ID > 0)
            {
                return RedirectToPage("/Index");
            }
            return Page();
        }

5 - Repository that implement those methods
 public class Repo_Account :IAccount
    {
        #region Instance Of Account 
        private Account _Account;
        public Account Account { get { return new Account(); } set { _Account = value; } }
        #endregion

        #region private read only instance of database context
        private readonly ClinicalDbContext _db;
        #endregion
        #region Public constructor 

        public Repo_Account(ClinicalDbContext db)
        {
            _db = db;
        }
        #endregion
        //AddNewAccount ChangePassword ChangeEmailAddress Verify_Login
        #region Add new account
        public void AddNewAccount(Account account)
        {
            _db.Accounts.Add(account);
            _db.SaveChanges();
        }
        #endregion

И, наконец, страница cshtml

    [![<input id="email" asp-for="Model.UserName" >
                                    <div class="invalid-feedback">
                                        <span asp-validation-for="Model.UserName" class="alert-danger"></span>
                                    </div>
 <input asp-for="Model.Password" class="form-control" >
                                <div class="invalid-feedback">
                                    <span asp-validation-for="Model.Password" class="alert-danger"></span>
                                </div>

<button type="submit" class="btn btn-primary btn-block" >
                                    Login
                                </button>][2]][2]

1 Ответ

0 голосов
/ 07 октября 2018

Вы не определили свойство с именем Model на своей странице входа.Вы определили один с именем Account.Измените код следующим образом:

[![<input id="email" asp-for="Account.UserName" >
 <div class="invalid-feedback">
     <span asp-validation-for="Account.UserName" class="alert-danger"></span>
 </div>
 <input asp-for="Account.Password" class="form-control" >
 <div class="invalid-feedback">
     <span asp-validation-for="Account.Password" class="alert-danger"></span>
 </div>

 <button type="submit" class="btn btn-primary btn-block" >Login</button>][2]][2]
...