数据模型中的数据字段验证工作

时间:2017-05-11 14:51:33

标签: c# entity-framework validation model asp.net-mvc-5

我只是尝试使用我的模型中的数据字段验证来验证用户将输入的电话号码我已经搜索了如何执行此操作,这是我现在所拥有的(我试图按照这些信息)我在msdn上看到:https://msdn.microsoft.com/en-us/library/cc488527.aspx):

这是我的元数据文件:

using System;
using System.Web.Mvc;
using System.Web.DynamicData;
using System.ComponentModel.DataAnnotations;

namespace InscriptionCentreFormation.Models
{

  [MetadataType(typeof(INSC_InscriptionMetadata))]
  public partial class INSC_Inscription
  {


  }
  public class INSC_InscriptionMetadata
  {
    [Display(Name = "Mobile Phone")]
    [DataType(DataType.PhoneNumber)]
    [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Enter a valid format")] //Vérifie le format du tel
    public string TelephoneMobile { get; set; }

    [Display(Name = "Home Phone")]
    [DataType(DataType.PhoneNumber)]
    [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Enter a valid format")] //Vérifie le format du tel
    public string TelephoneMaison { get; set; }
  }

}   

这是Generated Model类:

namespace InscriptionCentreFormation.Models
{
 using System;
 using System.Collections.Generic;

 public partial class INSC_Inscription
 {
    public int id { get; set; }
    public int idOccurenceFormation { get; set; }
    public string TelephoneMobile { get; set; }
    public string TelephoneMaison { get; set; }  
  }

} 

最后这里是注册页面的简化版本:

@using System.Web.UI.WebControls
@using InscriptionCentreFormation.Controllers
@using InscriptionCentreFormation.Models
@model INSC_Inscription
@{
  ViewBag.Title = "InscriptionFormation";
  Layout = "~/Views/Shared/_Layout.cshtml";
}


@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<br />
@using (Html.BeginForm("InscriptionFormation", "DetailProduit"))
{
    <div style="width:800px;">
        <span style="float:left"><b>Mobile phone :</b></span>
        @Html.TextBoxFor(m => m.TelephoneMobile, new { Style = "float:right;width:400px;" })
        @Html.ValidationMessageFor(model => model.TelephoneMobile, "", new { @class = "text-danger" })
        <br />
        <br />
        <span style="float:left"><b>Home phone :</b></span>
        @Html.TextBoxFor(m => m.TelephoneMaison, new { Style = "float:right;width:400px;" })
        @Html.ValidationMessageFor(model => model.TelephoneMaison, "", new { @class = "text-danger" })
    </div>
    <input type="submit" class="btn" value="S'inscrire" style="width:200px; text-align:center;"/>
}

<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

但问题是,当我尝试注册时,任何一个电话号码都没有验证,而且似乎无法理解原因,我看到了一些解决方案,例如在注册页面底部添加脚本但是它仍然无法工作。

对解决方案的任何提示都会有所帮助

1 个答案:

答案 0 :(得分:2)

元数据类中的属性不必与Actual model类中的属性相同。尝试将元数据类属性更改为:

  public class INSC_InscriptionMetadata
  {
    [Display(Name = "Mobile Phone")]
    [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Enter a valid format")] //Vérifie le format du tel
    public object TelephoneMobile { get; set; }

    [Display(Name = "Home Phone")]
    [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Enter a valid format")] //Vérifie le format du tel
    public object TelephoneMaison { get; set; }
  }

<强>更新

在页面中添加JQuery验证脚本(如果尚未存在):

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>

检查控制器中ModelState是否有效:

public ActionResult InscriptionFormation(INSC_Inscription insc)
{
        if (!ModelState.IsValid)
            return View();
..
..
}

我已经复制了你的代码,这些是我发现缺少的,以使验证工作。

同时在同一视图上进行验证,而不是将其导航到其他视图以验证模型。仅在模型有效且应由其他页面处理时才导航。这将有助于您保持简单。