2012-10-30 15 views
-1

我有一個模型,我綁定了一個帶有文本框的視圖。現在他們是某些文本框,我想只讀和從模型類。 因此,任何建議如何讓他們只能從模型類讀取。製作一個mvc文本框,可以從模型中讀取

+1

模型和視圖是相關對象的單獨集合。如果混合使用,你會打破關注點。 –

+0

你投票給我罰款...這些投票對我來說並不重要,我也在這裏學習n獲得新的東西,所以它只是一個查詢問。感謝您的解決方案。 –

+0

我沒投你一票。評論是爲了強調'爲什麼要使用mvc?'。如果你想知道,你不會從MVC中獲得太多好處。 –

回答

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> 

我的視圖模型爲:

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

這就是所有。

享受。

1

ReadOnly在MVC 2或MVC 1中不工作,但它在3(測試版)中工作。

從模型可以參考以下用途:

[ReadOnly(true)] 
public bool IsAdmin { get; set; } 
相關問題