MVCのModelは、データの伝達者だけではありません
3742 ワード
Modelで使用する場合、以前に3階層アーキテクチャを書いたように使用する人が多く、Modelをデータの伝達者として使用します.
例えばよくある書き方
この書き方は最もよくありますが、私が見たコードジェネレータもこのように生成されています.多くの人がモデルをデータの伝達者、データの一時領域としています.
Modelはデータを検証するためにも使用できます.参照:using System.ComponentModel.DataAnnotations;スペース
MVCを書いたことがある人はすべて知っていますが、デフォルトの項目にはこのような例があります.
しかし、多くの人がうまく使えないか、使えない.コントローラでは、モデルが検証に成功したかどうかを判断できます.IsValid.
しかし、これでは十分ではありません.一部のフィールドは検証する必要はありません.一部のフィールドは検証する必要があります.これでRemove(「検証されたフィールド」);柔軟に使えますが、それを無視したいのがそれです.
エラーを取り出す方法を添付し、単一のエラーを返します.それぞれ出力する必要はありません(これを使って単一のエラーを取り出し、jsonをクライアントに送信します).
例えばよくある書き方
public int Id { get; set; }
public int RoleId { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string NickName { get; set; }
public string Avatar { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string Qq { get; set; }
public DateTime AddTime { get; set; }
public DateTime LastLoginTime { get; set; }
public string LastLoginIp { get; set; }
public bool IsLock { get; set; }
public bool IsSuperUser { get; set; }
この書き方は最もよくありますが、私が見たコードジェネレータもこのように生成されています.多くの人がモデルをデータの伝達者、データの一時領域としています.
Modelはデータを検証するためにも使用できます.参照:using System.ComponentModel.DataAnnotations;スペース
[Display(Name = "ID")]
public int Id { get; set; }
[Required(ErrorMessage = " ID ")]
[Display(Name = " ID")]
public int RoleId { get; set; }
[Required(ErrorMessage = " ")]
[Display(Name = " ")]
public string Name { get; set; }
[Required(ErrorMessage = " ")]
[Display(Name = " ")]
public string Password { get; set; }
[Display(Name = " ")]
public string NickName { get; set; }
[Display(Name = " ")]
[DataType(DataType.Text)]
public string Avatar { get; set; }
[Display(Name = " ")]
public string Email { get; set; }
[Display(Name = " ")]
public string Phone { get; set; }
[Display(Name = "QQ ")]
public string Qq { get; set; }
[Display(Name = " ")]
public DateTime AddTime { get; set; }
[Display(Name = " ")]
public DateTime LastLoginTime { get; set; }
[Display(Name = " IP")]
public string LastLoginIp { get; set; }
[Display(Name = " ")]
public bool IsLock { get; set; }
[Display(Name = " ")]
public bool IsSuperUser { get; set; }
MVCを書いたことがある人はすべて知っていますが、デフォルトの項目にはこのような例があります.
しかし、多くの人がうまく使えないか、使えない.コントローラでは、モデルが検証に成功したかどうかを判断できます.IsValid.
しかし、これでは十分ではありません.一部のフィールドは検証する必要はありません.一部のフィールドは検証する必要があります.これでRemove(「検証されたフィールド」);柔軟に使えますが、それを無視したいのがそれです.
エラーを取り出す方法を添付し、単一のエラーを返します.それぞれ出力する必要はありません(これを使って単一のエラーを取り出し、jsonをクライアントに送信します).
/// <summary>
///
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
public static string GetModelErros(this ModelStateDictionary dic)
{
string errors = "";
if (!dic.IsValid)
{
//
//errors = dic.Keys.First<string>();
errors = dic.Values.First(t => t.Errors.Count > 0).Errors[0].ErrorMessage;
}
return errors;
}