我有一個僱員包含功能列表的模型。員工至少應該有一個功能。如何在MVC中的對象的必需列表<>上獲得不顯眼的客戶端驗證?
public class Employee
{
[Required(ErrorMessage = "Name is Required")]
public string Name { get; set; }
[Required(ErrorMessage = "Email is Required")]
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$",
ErrorMessage = "Email is not valid")]
public string Email { get; set; }
[Required(ErrorMessage = "At least one function is required")]
public List<Function> Functions { get; set; }
}
public class Function
{
[Required(ErrorMessage = "Name is Required")]
public string Name { get; set; }
}
我創建了一個EditorTemplate的功能
@model MvcClientSideValidation.Models.Function
<fieldset>
<legend>Functie</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</fieldset>
索引視圖使用EditorFor和ValidationMessageFor。
@Html.EditorFor(m => m.Functions)
@Html.ValidationMessageFor(m => m.Functions)
視圖還包含添加或刪除函數的代碼。
提交視圖時,客戶端驗證不會檢查函數是否存在。服務器端驗證確實。問題是當列表爲空時,沒有爲Function
屬性呈現輸入元素,因此沒有可以添加驗證標籤的標籤。
因此,我正在尋找一種簡單的方法來對List
和[Required]
屬性進行不顯眼的客戶端驗證。
編輯:我剛剛意識到[必需的]屬性可能只會驗證Function
不是null
。它不會檢查它是否包含任何項目。這對我來說很好,因爲該屬性將在回發時自動變爲null。
也許我過分簡化了我的問題。在真正的解決方案中,上傳文件列表的模型以及至少一個文件應該被上傳。我真的在尋找一種解決方案來進行服務器端同樣的驗證。 – comecme
@comecme - 是的,我所概述的會發生在客戶端。我不明白你的澄清。你總是至少有文本框1(空或不)。我假設您有某種添加項目功能可以增加您上傳的文件數量,以及從列表中刪除項目的刪除項目功能。只是不要讓最後一項被刪除,所以你總是至少有一組表單域來驗證。 –
這意味着如果文件名爲空,我必須確保我不呈現任何內容。另外,上傳文件時,如果列表只包含一個空文件名,我應該使用該條目。對於第二個文件,我必須將新條目添加到列表中。沒有我想要的那麼簡單。 – comecme