C# 在asp.net core 3中进行模型验证后,错误消息不可见
我对模型验证有问题。当ModelState包含错误时,它不会显示任何错误。它将焦点设置为第一个文本框(Firstname),但没有可见的错误消息 模型,CreateSiteUserModel:C# 在asp.net core 3中进行模型验证后,错误消息不可见,c#,validation,asp.net-core,razor,asp.net-core-mvc,C#,Validation,Asp.net Core,Razor,Asp.net Core Mvc,我对模型验证有问题。当ModelState包含错误时,它不会显示任何错误。它将焦点设置为第一个文本框(Firstname),但没有可见的错误消息 模型,CreateSiteUserModel: public interface ICreateSiteUserModel { [Required] Guid SiteUId { get; set; } [Required(AllowEmptyStrings = false, ErrorMessage = "Skriv inn
public interface ICreateSiteUserModel
{
[Required]
Guid SiteUId { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Skriv inn fornavn")]
string Firstname { get; set; }
[Required(ErrorMessage = "Skriv inn etternavn")]
string Lastname { get; set; }
[Required(ErrorMessage = "Skriv inn emailadresse")]
[EmailAddress]
string Email { get; set; }
[Required(ErrorMessage = "Skriv inn passord")]
[StringLength(30, MinimumLength = 8, ErrorMessage = "Passordet må bestå av minst 8 tegn inkludert minst et tall")]
string Password { get; set; }
}
public class CreateSiteUserModel : ICreateSiteUserModel
{
public Guid SiteUId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public interface ISiteModel
{
ISiteWrapper Site { get; set; }
ICreateSiteUserModel SiteUserModel { get; set; }
}
public class SiteModel : ISiteModel
{
public ISiteWrapper Site { get; set; }
public ICreateSiteUserModel SiteUserModel { get; set; } = new CreateSiteUserModel();
}
[HttpPost]
public async Task<IActionResult> Site([FromForm] CreateSiteUserModel model)
{
IActionResult action = default;
ISite site = await _sites.GetSite(model.SiteUId);
if (this.ModelState.IsValid)
{
IdentityResult result = await _ident.CreateUser(site.Id, model.Email, model.Password);
if (result.Succeeded)
{
IUser user = await this.DB.GetWorker<User>().Latest();
action = RedirectToAction("EditSiteUser", "Identity", new { UId = user.UId });
}
}
else
{
ISiteModel mdl = new SiteModel() { Site = new SiteWrapper(site, this.DB), SiteUserModel = model };
action = View(mdl);
}
return action;
}
@model ISiteModel
<form method="post">
<table style="width:100%;">
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname" />
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email" />
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password" />
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="@site.UId" />
<input type="submit" class="btn-dark" value="Lagre" formmethod="post" />
</td>
</tr>
</table>
</form>
<form method="post" novalidate="novalidate">
<table style="width:100%;">
<tbody>
<tr>
<td style="width:140px;">
<label for="SiteUserModel_Firstname">Firstname</label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light firstname input-validation-error" data-val="true" data-val-required="Skriv inn fornavn" value="" aria-describedby="firstname-error" aria-invalid="true">
<span class="error-msg color-danger field-validation-valid" data-valmsg-for="SiteUserModel.Firstname" data-valmsg-replace="true"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname">
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email valid">
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password">
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="62e8a8b1-72be-4f71-b2e6-9dce89fcde76">
<input type="submit" class="btn-dark" value="Lagre" formmethod="post">
</td>
</tr>
</tbody>
</table>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8JxeOiw3r2BBtI-MX6Hqs7u_pj2MJEQMl0kZvyoVW0CicaRoZns_U7UnOIrDe0ADt2mVHvxhOPagANjX4C0QupCPvRaKyz8YRnwOaK64gNIisfzv1ii_HRMrXS2Hpd_L9bHm6ypzgyyE-v7029xP_kg">
</form>
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input type="text" class="txt-light firstname" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
模型,站点模型:
public interface ICreateSiteUserModel
{
[Required]
Guid SiteUId { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Skriv inn fornavn")]
string Firstname { get; set; }
[Required(ErrorMessage = "Skriv inn etternavn")]
string Lastname { get; set; }
[Required(ErrorMessage = "Skriv inn emailadresse")]
[EmailAddress]
string Email { get; set; }
[Required(ErrorMessage = "Skriv inn passord")]
[StringLength(30, MinimumLength = 8, ErrorMessage = "Passordet må bestå av minst 8 tegn inkludert minst et tall")]
string Password { get; set; }
}
public class CreateSiteUserModel : ICreateSiteUserModel
{
public Guid SiteUId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public interface ISiteModel
{
ISiteWrapper Site { get; set; }
ICreateSiteUserModel SiteUserModel { get; set; }
}
public class SiteModel : ISiteModel
{
public ISiteWrapper Site { get; set; }
public ICreateSiteUserModel SiteUserModel { get; set; } = new CreateSiteUserModel();
}
[HttpPost]
public async Task<IActionResult> Site([FromForm] CreateSiteUserModel model)
{
IActionResult action = default;
ISite site = await _sites.GetSite(model.SiteUId);
if (this.ModelState.IsValid)
{
IdentityResult result = await _ident.CreateUser(site.Id, model.Email, model.Password);
if (result.Succeeded)
{
IUser user = await this.DB.GetWorker<User>().Latest();
action = RedirectToAction("EditSiteUser", "Identity", new { UId = user.UId });
}
}
else
{
ISiteModel mdl = new SiteModel() { Site = new SiteWrapper(site, this.DB), SiteUserModel = model };
action = View(mdl);
}
return action;
}
@model ISiteModel
<form method="post">
<table style="width:100%;">
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname" />
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email" />
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password" />
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="@site.UId" />
<input type="submit" class="btn-dark" value="Lagre" formmethod="post" />
</td>
</tr>
</table>
</form>
<form method="post" novalidate="novalidate">
<table style="width:100%;">
<tbody>
<tr>
<td style="width:140px;">
<label for="SiteUserModel_Firstname">Firstname</label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light firstname input-validation-error" data-val="true" data-val-required="Skriv inn fornavn" value="" aria-describedby="firstname-error" aria-invalid="true">
<span class="error-msg color-danger field-validation-valid" data-valmsg-for="SiteUserModel.Firstname" data-valmsg-replace="true"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname">
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email valid">
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password">
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="62e8a8b1-72be-4f71-b2e6-9dce89fcde76">
<input type="submit" class="btn-dark" value="Lagre" formmethod="post">
</td>
</tr>
</tbody>
</table>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8JxeOiw3r2BBtI-MX6Hqs7u_pj2MJEQMl0kZvyoVW0CicaRoZns_U7UnOIrDe0ADt2mVHvxhOPagANjX4C0QupCPvRaKyz8YRnwOaK64gNIisfzv1ii_HRMrXS2Hpd_L9bHm6ypzgyyE-v7029xP_kg">
</form>
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input type="text" class="txt-light firstname" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
控制器:
public interface ICreateSiteUserModel
{
[Required]
Guid SiteUId { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Skriv inn fornavn")]
string Firstname { get; set; }
[Required(ErrorMessage = "Skriv inn etternavn")]
string Lastname { get; set; }
[Required(ErrorMessage = "Skriv inn emailadresse")]
[EmailAddress]
string Email { get; set; }
[Required(ErrorMessage = "Skriv inn passord")]
[StringLength(30, MinimumLength = 8, ErrorMessage = "Passordet må bestå av minst 8 tegn inkludert minst et tall")]
string Password { get; set; }
}
public class CreateSiteUserModel : ICreateSiteUserModel
{
public Guid SiteUId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public interface ISiteModel
{
ISiteWrapper Site { get; set; }
ICreateSiteUserModel SiteUserModel { get; set; }
}
public class SiteModel : ISiteModel
{
public ISiteWrapper Site { get; set; }
public ICreateSiteUserModel SiteUserModel { get; set; } = new CreateSiteUserModel();
}
[HttpPost]
public async Task<IActionResult> Site([FromForm] CreateSiteUserModel model)
{
IActionResult action = default;
ISite site = await _sites.GetSite(model.SiteUId);
if (this.ModelState.IsValid)
{
IdentityResult result = await _ident.CreateUser(site.Id, model.Email, model.Password);
if (result.Succeeded)
{
IUser user = await this.DB.GetWorker<User>().Latest();
action = RedirectToAction("EditSiteUser", "Identity", new { UId = user.UId });
}
}
else
{
ISiteModel mdl = new SiteModel() { Site = new SiteWrapper(site, this.DB), SiteUserModel = model };
action = View(mdl);
}
return action;
}
@model ISiteModel
<form method="post">
<table style="width:100%;">
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname" />
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email" />
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password" />
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="@site.UId" />
<input type="submit" class="btn-dark" value="Lagre" formmethod="post" />
</td>
</tr>
</table>
</form>
<form method="post" novalidate="novalidate">
<table style="width:100%;">
<tbody>
<tr>
<td style="width:140px;">
<label for="SiteUserModel_Firstname">Firstname</label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light firstname input-validation-error" data-val="true" data-val-required="Skriv inn fornavn" value="" aria-describedby="firstname-error" aria-invalid="true">
<span class="error-msg color-danger field-validation-valid" data-valmsg-for="SiteUserModel.Firstname" data-valmsg-replace="true"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname">
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email valid">
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password">
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="62e8a8b1-72be-4f71-b2e6-9dce89fcde76">
<input type="submit" class="btn-dark" value="Lagre" formmethod="post">
</td>
</tr>
</tbody>
</table>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8JxeOiw3r2BBtI-MX6Hqs7u_pj2MJEQMl0kZvyoVW0CicaRoZns_U7UnOIrDe0ADt2mVHvxhOPagANjX4C0QupCPvRaKyz8YRnwOaK64gNIisfzv1ii_HRMrXS2Hpd_L9bHm6ypzgyyE-v7029xP_kg">
</form>
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input type="text" class="txt-light firstname" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
[HttpPost]
公共异步任务站点([FromForm]CreateSiteUserModel模型)
{
IActionResult action=默认值;
ISite site=wait_sites.GetSite(model.SiteUId);
if(this.ModelState.IsValid)
{
IdentityResult result=wait_ident.CreateUser(site.Id、model.Email、model.Password);
if(result.successed)
{
IUser user=wait this.DB.GetWorker().Latest();
action=RedirectToAction(“EditSiteUser”,“Identity”,new{UId=user.UId});
}
}
其他的
{
ISiteModel mdl=new SiteModel(){Site=new SiteWrapper(Site,this.DB),SiteUserModel=model};
动作=视图(mdl);
}
返回动作;
}
CSHTML:
public interface ICreateSiteUserModel
{
[Required]
Guid SiteUId { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Skriv inn fornavn")]
string Firstname { get; set; }
[Required(ErrorMessage = "Skriv inn etternavn")]
string Lastname { get; set; }
[Required(ErrorMessage = "Skriv inn emailadresse")]
[EmailAddress]
string Email { get; set; }
[Required(ErrorMessage = "Skriv inn passord")]
[StringLength(30, MinimumLength = 8, ErrorMessage = "Passordet må bestå av minst 8 tegn inkludert minst et tall")]
string Password { get; set; }
}
public class CreateSiteUserModel : ICreateSiteUserModel
{
public Guid SiteUId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public interface ISiteModel
{
ISiteWrapper Site { get; set; }
ICreateSiteUserModel SiteUserModel { get; set; }
}
public class SiteModel : ISiteModel
{
public ISiteWrapper Site { get; set; }
public ICreateSiteUserModel SiteUserModel { get; set; } = new CreateSiteUserModel();
}
[HttpPost]
public async Task<IActionResult> Site([FromForm] CreateSiteUserModel model)
{
IActionResult action = default;
ISite site = await _sites.GetSite(model.SiteUId);
if (this.ModelState.IsValid)
{
IdentityResult result = await _ident.CreateUser(site.Id, model.Email, model.Password);
if (result.Succeeded)
{
IUser user = await this.DB.GetWorker<User>().Latest();
action = RedirectToAction("EditSiteUser", "Identity", new { UId = user.UId });
}
}
else
{
ISiteModel mdl = new SiteModel() { Site = new SiteWrapper(site, this.DB), SiteUserModel = model };
action = View(mdl);
}
return action;
}
@model ISiteModel
<form method="post">
<table style="width:100%;">
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname" />
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email" />
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password" />
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="@site.UId" />
<input type="submit" class="btn-dark" value="Lagre" formmethod="post" />
</td>
</tr>
</table>
</form>
<form method="post" novalidate="novalidate">
<table style="width:100%;">
<tbody>
<tr>
<td style="width:140px;">
<label for="SiteUserModel_Firstname">Firstname</label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light firstname input-validation-error" data-val="true" data-val-required="Skriv inn fornavn" value="" aria-describedby="firstname-error" aria-invalid="true">
<span class="error-msg color-danger field-validation-valid" data-valmsg-for="SiteUserModel.Firstname" data-valmsg-replace="true"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname">
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email valid">
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password">
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="62e8a8b1-72be-4f71-b2e6-9dce89fcde76">
<input type="submit" class="btn-dark" value="Lagre" formmethod="post">
</td>
</tr>
</tbody>
</table>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8JxeOiw3r2BBtI-MX6Hqs7u_pj2MJEQMl0kZvyoVW0CicaRoZns_U7UnOIrDe0ADt2mVHvxhOPagANjX4C0QupCPvRaKyz8YRnwOaK64gNIisfzv1ii_HRMrXS2Hpd_L9bHm6ypzgyyE-v7029xP_kg">
</form>
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input type="text" class="txt-light firstname" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
@model-ISiteModel
艾特纳夫
电子邮件
口令
提交后的HTML:
public interface ICreateSiteUserModel
{
[Required]
Guid SiteUId { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Skriv inn fornavn")]
string Firstname { get; set; }
[Required(ErrorMessage = "Skriv inn etternavn")]
string Lastname { get; set; }
[Required(ErrorMessage = "Skriv inn emailadresse")]
[EmailAddress]
string Email { get; set; }
[Required(ErrorMessage = "Skriv inn passord")]
[StringLength(30, MinimumLength = 8, ErrorMessage = "Passordet må bestå av minst 8 tegn inkludert minst et tall")]
string Password { get; set; }
}
public class CreateSiteUserModel : ICreateSiteUserModel
{
public Guid SiteUId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public interface ISiteModel
{
ISiteWrapper Site { get; set; }
ICreateSiteUserModel SiteUserModel { get; set; }
}
public class SiteModel : ISiteModel
{
public ISiteWrapper Site { get; set; }
public ICreateSiteUserModel SiteUserModel { get; set; } = new CreateSiteUserModel();
}
[HttpPost]
public async Task<IActionResult> Site([FromForm] CreateSiteUserModel model)
{
IActionResult action = default;
ISite site = await _sites.GetSite(model.SiteUId);
if (this.ModelState.IsValid)
{
IdentityResult result = await _ident.CreateUser(site.Id, model.Email, model.Password);
if (result.Succeeded)
{
IUser user = await this.DB.GetWorker<User>().Latest();
action = RedirectToAction("EditSiteUser", "Identity", new { UId = user.UId });
}
}
else
{
ISiteModel mdl = new SiteModel() { Site = new SiteWrapper(site, this.DB), SiteUserModel = model };
action = View(mdl);
}
return action;
}
@model ISiteModel
<form method="post">
<table style="width:100%;">
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname" />
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email" />
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password" />
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="@site.UId" />
<input type="submit" class="btn-dark" value="Lagre" formmethod="post" />
</td>
</tr>
</table>
</form>
<form method="post" novalidate="novalidate">
<table style="width:100%;">
<tbody>
<tr>
<td style="width:140px;">
<label for="SiteUserModel_Firstname">Firstname</label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light firstname input-validation-error" data-val="true" data-val-required="Skriv inn fornavn" value="" aria-describedby="firstname-error" aria-invalid="true">
<span class="error-msg color-danger field-validation-valid" data-valmsg-for="SiteUserModel.Firstname" data-valmsg-replace="true"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname">
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email valid">
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password">
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="62e8a8b1-72be-4f71-b2e6-9dce89fcde76">
<input type="submit" class="btn-dark" value="Lagre" formmethod="post">
</td>
</tr>
</tbody>
</table>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8JxeOiw3r2BBtI-MX6Hqs7u_pj2MJEQMl0kZvyoVW0CicaRoZns_U7UnOIrDe0ADt2mVHvxhOPagANjX4C0QupCPvRaKyz8YRnwOaK64gNIisfzv1ii_HRMrXS2Hpd_L9bHm6ypzgyyE-v7029xP_kg">
</form>
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input type="text" class="txt-light firstname" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
名字
艾特纳夫
电子邮件
口令
正如@KirkLarkin建议的那样:删除Id和Name属性-让助手生成值
HTML:
public interface ICreateSiteUserModel
{
[Required]
Guid SiteUId { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Skriv inn fornavn")]
string Firstname { get; set; }
[Required(ErrorMessage = "Skriv inn etternavn")]
string Lastname { get; set; }
[Required(ErrorMessage = "Skriv inn emailadresse")]
[EmailAddress]
string Email { get; set; }
[Required(ErrorMessage = "Skriv inn passord")]
[StringLength(30, MinimumLength = 8, ErrorMessage = "Passordet må bestå av minst 8 tegn inkludert minst et tall")]
string Password { get; set; }
}
public class CreateSiteUserModel : ICreateSiteUserModel
{
public Guid SiteUId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public interface ISiteModel
{
ISiteWrapper Site { get; set; }
ICreateSiteUserModel SiteUserModel { get; set; }
}
public class SiteModel : ISiteModel
{
public ISiteWrapper Site { get; set; }
public ICreateSiteUserModel SiteUserModel { get; set; } = new CreateSiteUserModel();
}
[HttpPost]
public async Task<IActionResult> Site([FromForm] CreateSiteUserModel model)
{
IActionResult action = default;
ISite site = await _sites.GetSite(model.SiteUId);
if (this.ModelState.IsValid)
{
IdentityResult result = await _ident.CreateUser(site.Id, model.Email, model.Password);
if (result.Succeeded)
{
IUser user = await this.DB.GetWorker<User>().Latest();
action = RedirectToAction("EditSiteUser", "Identity", new { UId = user.UId });
}
}
else
{
ISiteModel mdl = new SiteModel() { Site = new SiteWrapper(site, this.DB), SiteUserModel = model };
action = View(mdl);
}
return action;
}
@model ISiteModel
<form method="post">
<table style="width:100%;">
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname" />
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email" />
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password" />
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="@site.UId" />
<input type="submit" class="btn-dark" value="Lagre" formmethod="post" />
</td>
</tr>
</table>
</form>
<form method="post" novalidate="novalidate">
<table style="width:100%;">
<tbody>
<tr>
<td style="width:140px;">
<label for="SiteUserModel_Firstname">Firstname</label>
</td>
<td>
<input id="firstname" name="firstname" type="text" class="txt-light firstname input-validation-error" data-val="true" data-val-required="Skriv inn fornavn" value="" aria-describedby="firstname-error" aria-invalid="true">
<span class="error-msg color-danger field-validation-valid" data-valmsg-for="SiteUserModel.Firstname" data-valmsg-replace="true"></span>
</td>
</tr>
<tr>
<td>Etternavn</td>
<td>
<input id="lastname" name="lastname" type="text" class="txt-light lastname">
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input id="email" name="email" type="email" class="txt-light email valid">
</td>
</tr>
<tr>
<td>Passord</td>
<td>
<input id="password" name="password" type="text" class="txt-light password">
</td>
</tr>
<tr>
<td></td>
<td class="pad-md">
<input id="siteUId" name="siteUId" type="hidden" value="62e8a8b1-72be-4f71-b2e6-9dce89fcde76">
<input type="submit" class="btn-dark" value="Lagre" formmethod="post">
</td>
</tr>
</tbody>
</table>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8JxeOiw3r2BBtI-MX6Hqs7u_pj2MJEQMl0kZvyoVW0CicaRoZns_U7UnOIrDe0ADt2mVHvxhOPagANjX4C0QupCPvRaKyz8YRnwOaK64gNIisfzv1ii_HRMrXS2Hpd_L9bHm6ypzgyyE-v7029xP_kg">
</form>
<tr>
<td style="width:140px;">
<label asp-for="SiteUserModel.Firstname"></label>
</td>
<td>
<input type="text" class="txt-light firstname" asp-for="SiteUserModel.Firstname" />
<span class="error-msg color-danger" asp-validation-for="SiteUserModel.Firstname"></span>
</td>
</tr>
我认为这是因为您为输入指定了id
和name
属性。通过使用asp for,这些覆盖了一的设置-只需使用生成的设置。@KirkLarkin是的,你是对的-删除了id和名称,它就工作了。谢谢别担心。您可以在呈现的HTML中看到问题。您将name
设置为firstname
,但是data-valmsg for
等用于SiteUserModel.firstname
。这些不匹配,因此验证消息不知道该做什么。