我有下面的視圖模型,它們用於表示問題調查,但它們被構造成更扁平化的網格以容納默認模型綁定器。MVC中沒有數據註釋的自定義模型和客戶端驗證
// Main ViewModel for the Question View
public class SurveyRowList
{
...
public IList<SurveyRow> SurveyRowList { get; set; }
}
public class SurveyRow
{
public int QuestionId { get; set; }
public int? ParentQuestionId { get; set; }
public int SurveyId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string HelpInformation { get; set; }
public int RenderOrder { get; set; }
public SurveyRowType RowType { get; set; }
// Collection of the same answer control, 1 or more times
// for each line number
public IList<AnswerControl> AnswerControls { get; set; }
}
public enum SurveyRowType
{
QuestionGroup = 1,
Question = 2,
AnswerRow = 3
}
public class AnswerControl
{
public int Id { get; set; }
public int QuestionId { get; set; }
// a reference to the database record answer id
public int SurveyAnswerId { get; set; }
// control type of checkbox, dropdown, input, dropdown-additional-textbox, checkbox-group
public ControlType ControlType { get; set; }
// used to specify getting particular backing data for dropdown and checkbox-group
public ControlSpecificType ControlSpecificType { get; set; }
public string Description { get; set; }
public string HelpInformation { get; set; }
public int RenderOrder { get; set; }
public bool InLine { get; set; }
public int LineNumber { get; set; }
public AnswerControlValueType Value { get; set; }
}
public class AnswerControlValueType
{
// Default string backing value when possible
public string Value { get; set; }
// AnswerCheckBox
public bool CheckValue { get; set; }
// AnswerCheckBoxListModal
public string ModalName { get; set; }
// AnswerMultiSelectListValue
public int[] ListValues { get; set; }
// making the options list setter public so that this data can be re-attached after model binding
public IEnumerable<SelectListItem> ListOptions { get; set; }
// AnswerImageValue
public HttpPostedFileBase Image { get; set; }
// AnswerSelectListAdditionalValue
public string AdditionalInformation { get; set; }
}
每個SurveyRow
就像一排表。只有SurveyRowType.AnswerRow
實際上使用AnswerControls
列表。當通過它們的類型和順序號呈現他們的訂購
實施例可以看出在此圖像中:
圖像只顯示一些簡單的例子,並且可以有每頁1-10行到最大值爲100,但我也添加了一些我想要應用的驗證規則的解釋。還有更多,但這些只是一些例子。
我的問題是,我想支持這個更復雜的驗證,但所有的規則和錯誤文本都存儲在數據庫中,1.因爲用戶配置,2.因爲錯誤文本的現有本地化,以支持幾種語言。
我在尋找人們可能必須能夠支持的任何建議。
我已經看到Fluent Validation之類的東西,但我還沒有深入研究,但到目前爲止,我看不到任何示例,特別是不會在模型上使用數據批註..並且還需要EnableIf或DisabledIf或EnabledIf樣式驗證適用於稍微複雜一些對象的規則。
我只是推薦fluentvalidation,但已經有了,其他選項可以是企業庫驗證塊。 – Marco
到目前爲止,它看起來像都依賴模型屬性上的數據註釋。我需要在運行時將我的模型添加到該模型的一個實例中。 – Pricey
不,他們沒有。 – Marco