Код серьезности Описание Ошибка состояния подавления строки файла проекта CS1061 «LoginModel» не содержит определения «Model», и доступный метод расширения «Model», принимающий первый аргумент типа «LoginModel», не может быть найден (являютсяВы пропустили директиву использования или ссылку на сборку?) Lb_Clinics C: \ Users \ dibem \ source \ repos \ Clinics \ Lb_Clinics \ Pages \ Login.cshtml 25 Active
, которая была ошибкой при попыткесвяжите мое свойство объекта с текстовыми полями (чтобы получить хорошую проверку).
Я делаю как обычно следующие шаги:
- Создание объекта с его свойствами (пример: account)
- Создание класса модели, наследуемого от DbContext
- добавить DbContext к службе
- создать интерфейс, который принимает только имена методов
- реализовать эти методы в классе репозитория (пример: repo_Account)
- Создать APage Razor Чем создать обычные методы OnPost OnGet OnPut
- сделать форму с методом (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]