【问题标题】:Model Validation in Asp.Net Core Doesnt WorkAsp.Net Core 中的模型验证不起作用
【发布时间】:2022-01-07 12:29:43
【问题描述】:

我的模型验证不起作用,但一切正常但有趣的部分是我的登录验证是有效的,但我的主要表单验证包含登录表单的所有内容,但我尝试了所有事情但没有结果。但我认为问题可能出在控制器上。我不知道请帮忙。

控制器

public IActionResult Index()
{
    return View();
}

[HttpPost]
public IActionResult Index(User user)
{
  if (ModelState.IsValid)
  {
     return RedirectToAction("Index");
  }
     return View(user);
}

用户模型

    public class User
    {
        [Key]
        public int LeadId { get; set; }

        [Display(Name ="name")]
        [Required(ErrorMessage = "please enter your name")]
        [MaxLength(50,ErrorMessage ="the max is 50")]
        public string FirstName { get; set; }

        [Display(Name = "family")]
        [Required(ErrorMessage = "please enter your family")]
        [MaxLength(50,ErrorMessage = "the max is 50")]
        public string LastName { get; set; }

        [Display(Name = "email")]
        [Required(ErrorMessage = "please enter your email")]
        [MaxLength(100,ErrorMessage = "the max is 100")]
        [DataType(DataType.EmailAddress)]
        public string EMailAddress1 { get; set; }

        [Display(Name = "mobile")]
        [Required(ErrorMessage = "please enter your mobile")]
        [MaxLength(11,ErrorMessage = "the max is 11")]
        [DataType(DataType.PhoneNumber)]
        public string MobilePhone { get; set; }

        [Required(ErrorMessage = "please choose gender")]
        public int gender { get; set; }
    }

查看

@model DataLayer.User

@{
    ViewData["Title"] = "welcome to form";
    Layout = "/Views/Shared/_Layout.cshtml";

}

<div class="preloader type-preloader d-flex justify-content-center align-items-center">
    <img src="/files/preloader/sdf.gif" alt="preloader" />
</div>
<div class="container">
    <form method="post" asp-action="Index" asp-controller="Home" name="myForm" id="myForm" class="box box1 col-lg-12 pb-3 pt-3 col-md-12 col-sm-12 col-12">
        <div class="row">
            @* Name *@
            <div class="form-group floating-label-group col-6 col-sm-12 col-xl-12 col-md-6 col-lg-6">
                <i class="zmdi zmdi-account namedarkmode namedarkmode1 "></i>
                <input asp-for="FirstName" type="text" name="Name" class="Nameinput Nameinput1 name farsiinput jh" lang="fa" required autocomplete="off"  title="enter your name" maxlength="50" />
                <label asp-for="FirstName" class="floating-label-name floating-label-name1">name:</label><br />
                <span asp-validation-for="FirstName" class="text-danger"></span>
            </div>

            @* Family *@
            <div class="form-group  floating-label-group col-6 col-sm-12 col-xl-12 col-md-6 col-lg-6">
                <i class="zmdi zmdi-account familydarkmode familydarkmode1 "></i>
                <input asp-for="LastName" type="text" name="Family" class="Familyinput Familyinput1 farsiinput family" lang="fa" required autocomplete="off" title="enter your family" maxlength="50" />
                <label asp-for="LastName" class="floating-label-family floating-label-family1">family:</label><br />
                <span asp-validation-for="LastName" class="text-danger"></span>
            </div>
        </div>

        @* Email *@
        <div class="row">
            <div class="form-group floating-label-group col-12 col-sm-12 col-md-12 col-xl-12 col-lg-12">
                <i class="zmdi zmdi-email  emaildarkmode emaildarkmode1"></i>
                <input asp-for="EMailAddress1" type="email" name="Email" class="Emailinput Emailinput1" autocomplete="off" required title="enter your email" maxlength="100" />
                <label asp-for="EMailAddress1" class="floating-label-email floating-label-email1">email:</label>
                <span asp-validation-for="EMailAddress1" class="text-danger"></span>
            </div>
        </div>
        @* Mobile *@
        <div class="row">
            <div class="d-flex align-items-center align-items-baseline col-12">
                <div class="form-group floating-label-group">
                    <i class="zmdi zmdi-phone phonedarkmode phonedarkmode1"></i>
                    <input asp-for="MobilePhone" type="tel" name="Mobile" class="MobileInput  MobileInput1 farsiinput" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*?)\..*/g, '$1');" pattern="[0-9]{11}" lang="fa" dir="rtl" autocomplete="off" required title="enter your mobile" maxlength="11" />
                    <label asp-for="MobilePhone" class="floating-label-mobile floating-label-mobile1">mobile:</label><br />
                    <span asp-validation-for="MobilePhone" class="text-danger"></span>
                </div>

                @* Male/Female *@
                <div class="form-group d-inline">
                    <div class="form-check custom-control custom-radio d-inline">
                        <input class="form-check-input MaleInput MaleInput1" type="radio" id="MaleRadio" name="Gender" />
                        <label class="form-check-label  custom-control-label cl maledarkmode maledarkmode1" for="MaleRadio"> man</label>
                    </div>
                    <div class="form-check custom-control custom-radio d-inline">
                        <input class="form-check-input FemaleInput FemaleInput1" type="radio" id="FemaleRadio" name="Gender" />
                        <label class="form-check-label  custom-control-label cl  femaledarkmode femaledarkmode1" for="FemaleRadio"> woman</label>
                        <small class="text-danger"></small>
                    </div>
                    <span asp-validation-for="gender"></span>
                </div>
            </div>
        </div>
        @* reCAPTCHA *@
        <div class="pt-2">
            <div class="d-flex justify-content-start form-group  recaptcha">
                <div class="g-recaptcha" data-sitekey="6LcZ05gbAAAAAHOBPJu3xvtCkQcB_mMQIVrxGmTd"></div>
            </div><br />
            <small class="text-danger recaptchaerror mb-6"></small>
        </div>

        @* button *@
        <div class="row pt-3 col-12">
            <button class="d-flex justify-content-start btn btn-outline-success" type="submit">
                <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
                enter
            </button>
        </div>
    </form>
</div>

布局

@model AdminContent
<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>form</title>
    @* material design iconic *@
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/material-design-iconic-font/2.2.0/css/material-design-iconic-font.min.css">
    @* bootstrap *@
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <link href="/css/bootstrap.min.css" rel="stylesheet" />
    @* css *@
    <link rel="stylesheet" href="/css/style.css" />
    @* fontawsome *@
    <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous" />
    <link rel="icon" type="image/x-icon" href="">
</head>
<body class="d-flex justify-content-center align-items-center">

    <header class="header">
        <nav class="navbar navbar1 d-flex align-items-baseline navbar-expand-sm navbar-toggleable-sm">
            <div class="container navtop navtop1">
@*                <img  src="/files/AdminImages/@Model.IconImageName" />
*@                @if (User.Identity.IsAuthenticated)
                {
                    <h1 class="navbar-brand navbar-brand1 d-inline text-secondary">@User.Identity.Name @ViewData["Title"]</h1>
                }
                else
                {
                    <h1 class="navbar-brand navbar-brand1 d-inline text-secondary">@ViewData["Title"]</h1>
                }
                @* start dark mode html *@
                <div class="container bn">
                    <div class="sun sun-logo">
                        <i class="fas fa-sun fonticon"></i>
                    </div>
                    <div class="moon moon-logo">
                        <i class="fas fa-moon fonticon"></i>
                    </div>
                </div>
                @* end dark mode html *@
                @if (User.Identity.IsAuthenticated)
                {
                    <i class="zmdi zmdi-power icon icon1"></i>
                    <a asp-action="Logout" asp-controller="Account" class="btn-link">exit</a>
                }
                else
                {

                    <i class="zmdi zmdi-account-box icon icon1 mb-7 ml-2"></i>
                    <a asp-action="Admin" asp-controller="Home" class="btn-link text text1 mnb mb-7 text-secondary">Admin</a>
                }
            </div>
        </nav>
    </header>
    <main class="d-flex flex-row justify-content-start align-items-start">
        @RenderBody()
    </main>
    @*    <script src="/lib/jquery/dist/jquery.min.js"></script>
    *@
    <script src="/js/jquery-3.5.1.min.js"></script>
    <script src="/js/index.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.3/jquery.validate.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.3/additional-methods.min.js"></script>
    <script src="https://www.google.com/recaptcha/api.js?hl=fa"></script>

    @RenderSection("Scripts", required: false)
</body>
</html>

【问题讨论】:

  • 也许 ModelState 是有效的!
  • 您也可以发布您的User 课程吗?
  • 好的,模型状态可以是有效的,但是当字段为空并且我提交按钮时,服务器验证不起作用,只有客户端验证起作用,因为我在输入中需要,但登录表单也有但是登录表单服务器验证工作和客户端验证消息不显示
  • 您是否也将字段的asp net消息添加到视图中
  • 你能发布一个示例如何在视图中查看一个字段

标签: c# asp.net asp.net-core validation web


【解决方案1】:

确保在剃须刀页面中包含您的型号名称。这就是razor 知道ViewModel 的方式

@model UserViewModel

Startup.cs

  services.AddRazorPages();

RazorPage.cshtml

 <form method="post">
            <div asp-validation-summary="ModelOnly"></div>
 </form>

【讨论】:

  • 不工作,我有@model ------ 在我看来
  • 我的猜测是 key 绑定失败。删除所有注释并查看 post 在检查 userviewmodel 时是否会绑定
  • 让我说有一次我更改了我的控制器代码并且显示了我的服务器验证错误消息,但没有单击按钮,它不验证任何内容,它只是显示我认为问题可能的消息在控制器代码中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
相关资源
最近更新 更多