2011-12-07 28 views
0

我想創建一個簡單的編輯頁面,它將從控制器傳遞一個ViewModel。目前,ViewModel裝飾了一些屬性,Edit.cshtml工作正常,簡單的@Html.EditorForModel()和一個提交按鈕。使用ModelMetaData的ASP.Net MVC3動態表單

public class MySimpleViewModel { 
    [ScaffoldColumn(false)] 
    Guid ID { get; set; } 

    [Required] 
    string Name { get; set; } 
} 

我需要做的就是改變基於用戶角色的ModelMetaData,使某些屬性爲只讀。是否可以修改控制器中的ModelMetaData,這樣Name就會出現,就好像我們已經給出屬性[HiddenInput(Display=true)]一樣?

對於我的應用程序來說,爲每個角色類型創建新模型並不可行,並且Model本身是相同的。什麼是最好的方法?我嘗試過以下方法無濟於事。

public ViewResult Edit(Guid id) { 
    var result = View(Service.GetByID(id)); 

    // Alter the result.ViewData.ModelMetaData here??? 

    return result; 
} 

當我在View檢查ModelMetaData,它沒有我在控制器中所做的更改。什麼是這樣做的好方法?我已經閱讀了人們創建ModelMetaDataProvider的子類的示例,但我不認爲這正是我需要的,或者我可能不知道。

謝謝

+0

你有想出辦法做到這一點。我期待着做同樣的事情。也許我應該加一個賞金。 – Jim

回答

0

方式晚了..但這裏是一個替代雖然?在我上一份工作中,我們爲EditorForModel()助手創建了自己的模板......並且在那些可以讓它檢查權限的框架中,然後創建標籤或輸入。只是一個想法..剛剛遇到這個帖子尋找更多關於modelmetadata的信息,所以想法編號留下評論:)