使用ModelMetaData的ASP.Net MVC3动态表单

时间:2011-12-07 23:44:51

标签: asp.net-mvc-3

我正在尝试创建一个简单的Edit页面,它将从控制器传递一个ViewModel。目前,ViewModel饰有一些属性,Edit.cshtml可以使用简单的@Html.EditorForModel()和提交按钮。

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;
}

当我检查ModelMetaData中的View时,它没有我在控制器中所做的更改。有什么好办法呢?我已经阅读了人们创建ModelMetaDataProvider的子类的示例,但我不认为这正是我需要的,或者我只是没有得到它。

谢谢

1 个答案:

答案 0 :(得分:0)

迟到了......但是这里有另外一种选择吗?在我上一份工作中,我们为EditorForModel()助手制作了自己的模板......在那些你可以让它检查权限然后制作标签或输入。只是一个想法..刚刚发现这篇文章寻找关于modelmetadata的更多信息所以想通过id发表评论:)