簡體   English   中英

MVC3將多個字段驗證為單個屬性

[英]MVC3 Validating Multiple Fields As A Single Property

我正在嘗試驗證包含在兩個字段中的電話號碼。

第一個字段顯示區號,另一個字段顯示剩余的電話號碼數字。

要求是:

  1. 它們都是必需的。
  2. 它們必須是數字的。
  3. 區號字段必須最多為6位,電話號碼字段必須最多為10位。

需要為兩個字段顯示單個消息。 例如,如果區域代碼丟失但提供了電話號碼,則在兩個字段“請輸入電話號碼”之后應顯示一條消息

我目前的模型類似於:

public class Customer
{
    //...other fields here

    public string AreaCode { get; set; }

    public string PhoneNumber { get; set; }
}

我不能將電話實現為具有正則表達式或simlar的單個字段。

還有一個類似的問題這個位置 (也是一種類似於 ),其中的答案建議創建一個自定義的驗證屬性(在這種情況下,一個名為MultiFieldRequired )來指定需要哪些屬性中的字段的名稱。 然后,驗證屬性使用反射來檢查其他屬性的值,以報告是否存在錯誤。

例如,在上述模型的情況下,我相信我應該:

public class Customer
{
    //...other fields here

    public string AreaCode { get; set; }

    [MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
    public string PhoneNumber { get; set; }
}

但是,我遇到了提供的解決方案的一個小問題。 自定義驗證屬性返回的錯誤僅針對具有數據注釋的字段(PhoneNumber是上面的模型)報告。 因此,如果用戶未輸入AreaCode但提供了PhoneNumber,則會針對PhoneNumber字段而不是AreaCode報告錯誤。 此外,如果您使用隨Visual Studio Internet項目提供的CSS,則提供的PhoneNumber字段將顯示為紅色,而無效區域代碼顯示為白色(未顯示錯誤),因此這看起來有點奇怪。

有沒有人有辦法糾正這種着色行為或一種方法,如果任何一個字段出錯(使用字段上的正確着色)我可以報告錯誤消息?

先感謝您。

在兩者上應用該屬性並且只有一個ValidationMessageFor(任何人)並將其放在要顯示消息的位置(從帖子看起來您似乎只需要一條錯誤消息)。

public class Customer
{
    //...other fields here

    [MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
    public string AreaCode { get; set; }

    [MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
    public string PhoneNumber { get; set; }
}

視圖

    <div class="editor-label">
        @Html.LabelFor(model => model.AreaCode)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.AreaCode)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.PhoneNumber)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.PhoneNumber)
        @Html.ValidationMessageFor(model => model.PhoneNumber)
    </div>
[MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
public class Customer
{
    //...other fields here

    public string AreaCode { get; set; }

    public string PhoneNumber { get; set; }
}

需要的Multi字段需要放在類上,而不是單個屬性。 如果查看實現,它會查看傳入的對象,並迭代其屬性。

暫無
暫無

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

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