2010-02-13 91 views
8

我正在創建一個asp.net mvc 2應用程序,根據用戶輸入動態生成我的視圖模型。簡而言之,用戶可以選擇他想要在他的視圖中看到的字段。ASP.NET MVC 2動態生成模型中的數據註釋

由於模板化的幫助程序嚴重依賴於模型屬性和屬性(數據註釋),所以我需要以某種方式在運行時將這些屬性添加到視圖模型中。不需要說這不是一個簡單的任務。

那麼,你們在這種情況下推薦我做什麼?我無法靜態添加屬性,所以我應該繼續嘗試將它們動態添加,即使它有很多工作,或者我應該嘗試使用不同的方法嗎?

在此先感謝!

費利佩

回答

3

自定義模型聯編程序只會幫助您在綁定部分。這對ASP.NET MVC的模板幫助器或其他功能沒有幫助。

我建議由ModelMetadataProvider繼承和利用ModelMetadataProviders註冊您的供應商在Global.asax中編寫自定義提供商,而不是。定製的元數據提供者可以從任何它想要的地方獲得元數據:CLR屬性,XML文件,數據庫或隨機數生成器。內置的Data Annotations提供程序當然使用CLR屬性。

您可能需要查看內置Data Annotations元數據提供程序的源代碼,以查看如何實現提供程序的示例。您可以從the CodePlex site下載ASP.NET MVC 2 RC 2源代碼。 MVC Futures項目中也可能有一個實現,但我不確定。

+0

非常感謝! – 2010-02-13 16:35:06

0

聽起來有點小題大做(如果我理解正確的話) - 這是動態創建模型。你沒有使用模型的主要好處;編譯時間檢查。

我會嘗試使用特定於該任務的對象(例如UserForm類,其中包含UserFormFields類的列表等),而不是實時創建它們。

編輯:我的建議是使用基於屬性的驗證並牢記驗證設計模型。象下面這樣的設計或許可以解釋我的觀點更好:

interface IUserValidation 
{ 
    bool IsValid(); 
} 

class RequiredUserValidation : IUserValidation 
{ 
    public bool IsValid() 
    { 
     // .... 
    } 
} 

class UserFormField 
{ 
    List<IUserValidation> _validations; 

    public IEnumerable<ValidationResult> Validate() 
    { 
     // ... 
    } 
} 
+0

這幾乎是我的模型的樣子。包含數據的字段集合。問題是我在編譯時沒有關於這些字段的任何信息。我需要查詢數據庫並從字段中獲取信息,並填充它們的屬性 – 2010-02-13 02:22:54

0

好像你需要的是動態應用驗證的自定義視圖模型粘合劑。