使用MVC3 创建自定义模板,实现Index,edit,Details等模板页面。

因为MVC3如果创建Controllers没有创建View 的话会默认去Shared下去找Edit,Create,Details,Index。
所以如果是标准增删改查业务的话,完全可以写个通用的模板放到Shared下,实现标准的增删改查业务。
是否显示,中文名称都在你写的Metadata里标注的Attribute
   
[MetadataType( typeof (TestModelMetadata))]
public partial class TestModel
{
[DisplayName(
" 测试Metadata " )]
public class TestModelMetadata
{
[Required(ErrorMessage
= " 名称不能为空 " )]
[RegularExpression(
" ^.{1,16}$ " , ErrorMessage = " 名称格式错误 " )]
[DisplayName(
" 名称 " )]
public object Name { get ; set ; }
}
}
下面是一个Details的一个模板页面,放到Shared下如果没有创建Details的View就会访问它。
   
@model System.Object
@{
List
< KeyValuePair < string , string >> columnNames = new List < KeyValuePair < string , string >> ();
foreach (var metadata in ModelMetadataProviders.Current.GetMetadataForProperties( null , Model.GetType()))
{
@
* 此if用来判断是否是有效的数据列,去除获取不可显示列,因下面要从字典里获取外键信息生成DropDownList * @
if (metadata.ModelType != typeof (System.Data.EntityState)
&& ! metadata.IsComplexType
&& ! ViewData.TemplateInfo.Visited(metadata))
{
columnNames.Add(
new KeyValuePair < string , string > (metadata.PropertyName, metadata.DisplayName));
}
}

@
* 从MetaData里获取表的显示名称 * @
ViewBag.Title
= ModelMetadataProviders.Current.GetMetadataForType(() => null , Model.GetType()).DisplayName + " 详细 " ;

}
< h2 > @ViewBag.Title </ h2 >
@Html.DisplayForModel()
@foreach (KeyValuePair
< string , object > a in ViewData)
{
if (a.Value.GetType() == typeof (SelectList))
{
< div class = " editor-label " > @Html.Label(a.Key, columnNames.Find(p => p.Key == a.Key).Value) </ div >
< div class = " editor-field " >
@Html.DropDownList(a.Key,
null , new { @disabled = " disabled " })
</ div >
}
}
< div >
@Html.ActionLink(
" 返回列表 " , " Index " )
</ div >

你可能感兴趣的:(index)