使mvc中的文本框可以从模型中读取

时间:2012-10-30 10:31:13

标签: asp.net-mvc

我有一个模型,我已经绑定了带有文本框的视图。现在他们是某些文本框,我想让它们只读,而来自模型类。 所以任何建议我怎样才能让它们只从模型类中读取。

2 个答案:

答案 0 :(得分:1)

ReadOnly并未在MVC 2或MVC 1中工作,但它在3& 4(beta)。

您可以使用以下模型:

 [ReadOnly(true)]
 public bool IsAdmin { get; set; }

答案 1 :(得分:0)

以下是答案: 视图类似于

<div>
    <table>
        <tr>
            <td>@Html.LabelFor(x => x.Name)</td>
            <td>@Html.EditorFor(x => x.Name)</td>
        </tr>
        <tr>
            <td>@Html.LabelFor(x => x.DOB)</td>
            <td>@Html.EditorFor(x => x.DOB)</td>
        </tr>
        <tr>
            <td>@Html.LabelFor(x => x.Address)</td>
            <td>@Html.EditorFor(x => x.Address)</td>
        </tr>
    </table>
</div>

我的ViewModel是:

public class SampleModel
    {
        [EnableForRole]
        public String Name { get; set; }

        [EnableForRole]
        public DateTime DOB { get; set; }

        [EnableForRole]
        public String Address { get; set; }
    }

自定义元数据属性如下:

public class EnableForRoleAttribute : Attribute, IMetadataAware
    {

        public void OnMetadataCreated(ModelMetadata metadata)
        {
            var toEnable = IsAccessible(metadata.PropertyName);
            metadata.IsReadOnly = !toEnable;
        }
        private bool IsAccessible(String actionName)
        {            
            return HttpContext.Current != null && HttpContext.Current.User != null && HttpContext.Current.User.IsInRole(roleName); //if you use MembershipProvider
        }
    }

现在最后你应该在EditorTemplate文件夹中添加部分视图(String.cshtml),如:

@if (ViewData.ModelMetadata.IsReadOnly)
{
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
        new {  @readonly = "readonly" })                                     
}
else
{
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue) 
}

多数人。

享受。