簡體   English   中英

[必需]做什么?

[英]What does [Required] do?

我在網上沒有發現[Required]的實際功能。 msdn-article根本不是探索性的。

static class Program
{
    public static Main()
    {
        var vustomer = new CustomerClass();
    }
}

public class CustomerClass
{
    public string m_FirstName;
    [Required]
    public string m_LastName;
}

據我了解,這應該引發異常,因為m_LastName是必需的,但未設置。 但是我沒有。 我不知道這有什么好處,實際上沒有做。

與所有其他屬性一樣, RequiredAttribute除了注釋某些內容(在這種情況下,是類型的字段)之外,本身不會執行任何操作。 完全由使用該類型的應用程序來檢測屬性的存在並做出相應的響應。

您的示例程序不會執行此操作,因此該屬性沒有任何可見的效果。 諸如ASP.NET MVC和WPF之類的某些框架檢查並響應該屬性的存在。

Validator類使用此屬性添加基於從ValidationAttribute繼承的任何類型的驗證錯誤。 例如,這可用於MVC模型驗證

有關RequiredAttribute文檔:

指定需要一個數據字段值。

但是,此驗證通常僅在UI層中執行。 它不會“烘焙”到構造函數或其他低級用法中。 如果您想手動觸發驗證,則可以執行以下操作:

var customer = new CustomerClass();
var context = new ValidationContext(customer, serviceProvider: null, items: null);
var results = new List<ValidationResult>();

var isValid = Validator.TryValidateObject(customer, context, results);

if (!isValid)
{
    foreach (var validationResult in results)
    {
        Console.WriteLine(validationResult.ErrorMessage);
    }
}

為了增加當前的答案,以下是一些我可以想到的實際用途:

  • 實體框架使用它來將數據庫建模為不可為空的字段。
  • Javascript客戶端驗證提供了JavaScript庫,用於檢查輸入字段中是否有任何數據,否則阻止表單提交,從而避免不必要的服務器往返。
  • 服務器端驗證(在執行模型綁定時)還會檢查何時使用該裝飾器發布模型,而該裝飾器中傳入的屬性在請求中。 這確定是否應將模型狀態設置為無效狀態。 (1)
  • JSON.NET庫也有注釋,它可以更改模型的序列化/反序列化方式。 我非常有信心(但不確定),Json.net的“驗證模式”在驗證模式時確實考慮了“ Required”屬性。
  • Web服務上使用了其他屬性裝飾器,但是在這種情況下,“必需”不是我所知道的。
  • Web api使用此屬性將屬性標記為文檔幫助頁面和模型綁定所要求的。
  • 您可以創建自己的應用程序邏輯,以了解“ Required”屬性。 例如,在需要標記的視圖上用*標記屬性的視圖。

這是一些用途,但您不僅限於此。

(1) 注意:例如,如果您的屬性是一個int並用Required進行裝飾,則模型狀態永遠不會處於無效狀態。 對於此用例,應使用Nullable屬性。

在C#中,屬性幾乎是對類和屬性的修飾。

除了一些與安全性相關的屬性外,大多數屬性什么都不做。 它們被更高級別的框架用來做某事。

對於ASP.NET 4 MVC,僅當對象是請求的一部分時,該屬性才用於生成錯誤。

如果要在任何其他環境中使用該屬性,則必須編寫代碼進行檢查。

它不會從普通的舊public static void Main()做任何事情

指定需要一個數據字段值。

http://msdn.microsoft.com/zh-CN/library/system.componentmodel.dataannotations.requiredattribute(v=vs.110).aspx

有幾個屬性可以控制如何應用此屬性。

MSDN上有一篇文章討論了如何使用驗證屬性來注釋對象模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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