簡體   English   中英

ASP.NET 核心 MVC model 在視圖模型中驗證與基礎 model

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM