ホームページ > バックエンド開発 > PHPチュートリアル > 共有MVCデータ検証例の紹介

共有MVCデータ検証例の紹介

零下一度
リリース: 2023-03-10 11:24:02
オリジナル
1015 人が閲覧しました

この記事では主に MVC データ検証の関連情報を詳しく紹介します。興味のある方は参考にしてください

1. 一般的な状況

MVC フレームワークを使用したことがある人にとっては、私はよく知っています。たとえば、MVC データ検証は次のようなモデルがあります:


public class UserInfo
  {
    [Required(ErrorMessage = "UserName不可为空1111")]
    public string UserName { get; set; }
    public string Sex { get; set; }
    public string Mobile { get; set; }
    public string Address { get; set; }
  }
ログイン後にコピー

フロントエンド:


@using (Html.BeginForm()) 
{
  @Html.AntiForgeryToken()
  <p class="form-horizontal">
    <h4>UserInfo</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <p class="form-group">
      @Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
      <p class="col-md-10">
        @Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" })
      </p>
    </p>
    <p class="form-group">
      @Html.LabelFor(model => model.Sex, htmlAttributes: new { @class = "control-label col-md-2" })
      <p class="col-md-10">
        @Html.EditorFor(model => model.Sex, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Sex, "", new { @class = "text-danger" })
      </p>
    </p>
    <p class="form-group">
      @Html.LabelFor(model => model.Mobile, htmlAttributes: new { @class = "control-label col-md-2" })
      <p class="col-md-10">
        @Html.EditorFor(model => model.Mobile, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Mobile, "", new { @class = "text-danger" })
      </p>
    </p>
    <p class="form-group">
      @Html.LabelFor(model => model.Address, htmlAttributes: new { @class = "control-label col-md-2" })
      <p class="col-md-10">
        @Html.EditorFor(model => model.Address, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Address, "", new { @class = "text-danger" })
      </p>
    </p>
    <p class="form-group">
      <p class="col-md-offset-2 col-md-10">
        <input type="submit" value="Create" class="btn btn-default" />
      </p>
    </p>
  </p>
}
ログイン後にコピー

効果:

はい、MVC はいくつかの 属性を渡すことができます 特定の機能をデータを検証します。これは誰にとっても馴染みのない話かもしれません。

それだけなら、何も問題ありません。

2. 一般的な状況

実際の開発では、ほとんどの場合、データベース内のすべてのテーブルまたはビューに、コード内で対応するクラスmodelを作成します。一歩下がって、このクラスの一部の属性にデータ検証機能を追加したとしても、データベースの変更後にこれらのモデルを再生成すると、検証機能は削除される前にそれらを変更すべきではありません。 、では、この問題をどうやって解決すればよいのでしょうか?

仮定します:


public class UserInfo
  {  
    public string UserName { get; set; }
    public string Sex { get; set; }
    public string Mobile { get; set; }
    public string Address { get; set; }
  }
ログイン後にコピー

UserInfo はデータベースによって生成されたモデルです。データベースによって生成されたモデルを変更すべきではありません。ただし、このモデルでは特定の属性に対してデータ検証を実行する必要があります。たとえば、UserName 属性に対して非 null 検証を実行する必要があります。

通常、誰もが部分分類を考えます。はい、部分分類によって上記の問題を解決できます。

まず、モデル内のクラスにキーワード Partial を追加し、このモデルの部分クラスを作成します。


public partial class UserInfo
  {
    [Required(ErrorMessage = "UserName不可为空1111")]
    public string UserName { get; set; }
  }
ログイン後にコピー

ただし、これにより、クラス内に重複した属性が存在するというエラーが表示されます。はい、一部のクラスでは、属性に同じ名前を付けることができません。では、何をすべきでしょうか? MVC フレームワークはすでに解決策を提供しています。

次のように書くことができます:


[MetadataType(typeof(MeteUserInfo))]
  public partial class UserInfo
  {
    private class MeteUserInfo
    {
      [Required(ErrorMessage = "UserName不可为空1111")]
      public string UserName { get; set; }
    }
  }
ログイン後にコピー

このようにして、上記の問題は簡単に解決されます。

以上が共有MVCデータ検証例の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート