[英]ASP.NET Core MVC model validation in viewmodel with base model
我正在使用 ASP.NET Core MVC 開發一個 web 應用程序,但我在 model 驗證方面遇到了問題。
當我在 class 中設置驗證,然后在視圖 model 中使用它時,驗證不起作用。 我怎么能與之抗爭呢?
這是我的代碼:
public class Il : IEntity
{
[Required(ErrorMessage = "Kodu boş geçilemez")]
public int IlKodu { get; set; }
public int UlkeId { get; set; }
[Required(ErrorMessage = "Ad boş geçilemez")]
public string Ad { get; set; }
public int Id { get; set; }
public DateTime? KayitTarihi { get; set; }
public DateTime? GuncellemeTarihi { get; set; }
}
查看模型 class;
public class IlAddViewModel
{
public Il Il { get; set; }
public List<Ulke> Ulkeler{ get; set; }
}
然后是視圖:
<div class="container pt-4 eklemeDiv col-4">
<form asp-controller="Il" asp-action="Add" asp-area="Admin" method="post">
<div class="form-group">
<label asp-for="Il.IlKodu">Il Kodu</label>
<input asp-for="Il.IlKodu" class="form-control" placeholder="İl Kodu Giriniz">
<span asp-validation-for="Il.IlKodu" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Il.Ad">Il Kodu</label>
<input asp-for="Il.Ad" class="form-control" placeholder="İl Kodu Giriniz">
<span asp-validation-for="Il.Ad" class="text-danger"></span>
</div>
<div class="form-group">
<label >Ülke</label>
<select style="width: 100%;height:30px" id="selectIl" asp-for="Il.UlkeId"
asp-items="@(new SelectList(Model.Ulkeler,"Id","Ad"))">
<option>Lütfen Seçim Yapınız</option>
</select>
</div>
<input id="btnIlEkle" type="submit" value="Ekle" class="btn btn-xs btn-success" />
<a class="btn btn-xs btn-primary" asp-action="Anasayfa" asp-area="Admin" asp-controller="Admin"><i class="fas fa-chevron-left"></i>Anasayfaya Dön</a>
</form>
</div>
視圖 model 未在視圖中顯示驗證消息。 以及如何顯示列表元素的驗證消息?
我的朋友們,我的代碼的所有部分的結構都是正確的,只有一個錯誤丟失了,今天我終於找到了。 我正在分享此解決方案以幫助他人;
還有controller代碼;
[HttpPost]
public async Task<ActionResult> Add(IlAddViewModel ilAddViewModel)
{
var kayitVarmi = _ilService.BenzerKayitVarMi(ilAddViewModel.Il.IlKodu, ilAddViewModel.Il.Ad);
if (kayitVarmi)
{
TempData.Add("Hata", "Böyle bir kayıt mevcut");
return RedirectToAction("Add");
}
else
{
if (ModelState.IsValid && !kayitVarmi)
{
ilAddViewModel.Il.KayitTarihi = DateTime.Now;
await _ilService.Add(ilAddViewModel.Il);
TempData.Add("Message", String.Format("{0} başarıyla eklendi", ilAddViewModel.Il.Ad));
return RedirectToAction("Anasayfa", "Admin", new { Area = "Admin" });
}
}
return RedirectToAction("Add");
}
要實現此驗證錯誤,您必須添加必要的 javascript 包,如下所示;
<script src="~.../jquery-validation/dist/jquery.validate.js"></script>
<script src="~.../jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.js"></script>
這些 javascript 包有助於顯示驗證消息,而無需使用 post to action 方法。
在 controller 中,您可以訪問 model state 以驗證其是否有效。 controller 代碼應該是這樣的
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(Employee employee)
{
try
{
//Here ModelState.IsValid will be true in case all the required fields that are mentioned in employee class
if (ModelState.IsValid)
{
return RedirectToAction("Index");
}
return View();
}
catch (Exception)
{
return View();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.