簡體   English   中英

驗證模型數據

[英]Validate model data

我有一個關於驗證模型的問題,具體取決於哪些文本字段具有值。 我有一個簡單的模型:

    public class Person
    {
        [DisplayName("Forename")]
        [Required(ErrorMessage = "Please enter a forename")]
        public string Forename { get; set; }

        [DisplayName("Surname")]
        [Required(ErrorMessage = "Please enter a surname")]
        public string Surname { get; set; }

        [DisplayName("Country")]
        [Required(ErrorMessage = "Please enter a country")]
        public string Country { get; set; }

        [DisplayName("Phone Number")]
        [Required(ErrorMessage = "Please enter a phone number")]
        public string Phone { get; set; }

        [DisplayName("Mobile Number")]
        [Required(ErrorMessage = "Please enter a mobile number")]
        public string Mobile { get; set; }
    }

在我看來,我使用以下代碼將“姓氏,姓氏,國家和電話”顯示為文本字段:

@Html.LabelFor(x => x.Forename)
@Html.TextBoxFor(x => x.Forename)
@Html.ValidationMessageFor(x => x.Forename)

如果用戶沒有電話號碼,則可以單擊按鈕,這將顯示“移動電話號碼”的另一個文本字段。 然后,“電話”文本字段將重置。 如果用戶輸入手機號碼,然后提交表格,它將失敗。 是否可以在模型驗證中包含條件語句以僅在另一個屬性沒有值的情況下驗證一個屬性。

因此,如果“ Mobile”具有值,但“ Phone”沒有,驗證將驗證“ Mobile”,但忽略“ Phone”,反之亦然。 抱歉,如果最后一段不夠清楚。 任何幫助將不勝感激。

您總是可以在控制器中進行驗證,下面的偽代碼

if (Condition)
{
    ModelState.AddModelError("PropertyNameHere", "ErrorMessageHere");
}

保持原樣。 只需從模型中刪除[Required()]標簽即可。 您還希望將此代碼添加到if(ModelState.IsValid)代碼上方。

您可以通過簡單的檢查手動完成操作,例如:

if (ModelState.ContainsKey("Phone Number") && !ModelState.ContainsKey("Mobile Number"))
         ModelState.Remove("Phone Number");
else if (!ModelState.ContainsKey("Phone Number") && ModelState.ContainsKey("Mobile Number"))
         ModelState.Remove("Mobile Number");

暫無
暫無

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

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