2012-08-07 34 views
1

我想草稿構建一個動態的形式,我已經創建了以下內容:MVC動態表單如何添加驗證

與我想告訴所有字段XML文件:

<?xml version="1.0" encoding="utf-8" ?> 
<Fields> 
    <FieldList> 
     <Field> 
      <Type>checkbox</Type> 
      <Name>gender</Name> 
      <DefaultValue>false</DefaultValue> 
      <CssClass>myclass</CssClass> 
     </Field> 
     <Field> 
      <Type>textbox</Type> 
      <Name>name</Name> 
      <DefaultValue>fill name</DefaultValue> 
      <CssClass>formtextbox</CssClass> 
     </Field> 
    </FieldList> 
</Fields> 

鍵入的,我用反序列化XML A類觀點:

@model Fields 
@{ 
    if(Model!=null) 
    { 
     using (Html.BeginForm()) 
     { 
      foreach (Field field in Model.FieldList) 
      { 
       switch(field.Type) 
       { 
        case "textbox": 
         @Html.TextBox(field.Name, field.DefaultValue); 
        break; 

        case "checkbox": 
         @Html.CheckBox(field.Name,Convert.ToBoolean(field.DefaultValue)); 
        break; 
       } 
      }  
     } 
    } 
} 

通過應用程序正常工作的時刻,但我有以下疑點:

1)我認爲不是一個優雅的解決方案,因爲我必須在視圖中放置太多的代碼嗎?

2)我想現在添加一些服務器驗證。我通常使用數據註釋,但這裏不可能,因爲我不知道我提交的東西是怎麼樣的。有沒有什麼辦法可以即時創建一個類實例並隨時添加數據註解?

3)我創建了另一個處理帖子的動作和控制器。因爲我不知道即時通訊提交我的行動不會收到任何參數。我想我必須從我的行動中使用Request.Form嗎?

+0

我覺得,您可以將foreach部分移到控制器,而是傳遞一個類的數組,該類可能有fr你的XML到視圖 – Yasser 2012-08-07 11:38:10

回答

1

我的第一個想法是實現一個自定義HtmlHelper方法,該方法將採用XML併爲您生成視圖。就像那樣,你的視圖中只有一行代碼。
至於驗證,您可以擴展DataAnnotationsModelValidatorProvider並覆蓋GetValidators(),以根據您認爲合適的參數或策略插入默認的mvc驗證器和/或您自己的驗證器。這些也會傳播到客戶端。

0

我建議添加多個類型:

abstract class Field { 
    public string Name {get;set; } 
} 

class BooleanField : Field{ 
    public bool Value { get;set; } 
} 

class TextField : Field{ 
     public string ValidationRegEx { get; set } 
     public string Value { get;set; } 
} 

同時添加編輯模板,爲每種類型的

要爲文本字段添加驗證,您可以創建自定義的驗證屬性,該屬性檢查該值是否與驗證註冊表相匹配

相關問題