-1
我有一個模型,我綁定了一個帶有文本框的視圖。現在他們是某些文本框,我想只讀和從模型類。 因此,任何建議如何讓他們只能從模型類讀取。製作一個mvc文本框,可以從模型中讀取
我有一個模型,我綁定了一個帶有文本框的視圖。現在他們是某些文本框,我想只讀和從模型類。 因此,任何建議如何讓他們只能從模型類讀取。製作一個mvc文本框,可以從模型中讀取
下面是答案: 查看是一樣的東西
<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)
}
這就是所有。
享受。
ReadOnly
在MVC 2或MVC 1中不工作,但它在3(測試版)中工作。
從模型可以參考以下用途:
[ReadOnly(true)]
public bool IsAdmin { get; set; }
模型和視圖是相關對象的單獨集合。如果混合使用,你會打破關注點。 –
你投票給我罰款...這些投票對我來說並不重要,我也在這裏學習n獲得新的東西,所以它只是一個查詢問。感謝您的解決方案。 –
我沒投你一票。評論是爲了強調'爲什麼要使用mvc?'。如果你想知道,你不會從MVC中獲得太多好處。 –