65.9K
CodeProject 正在变化。 阅读更多。
Home

探索 ASP.NET MVC3/4 中的显示和编辑器模板

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.95/5 (10投票s)

2013年10月23日

CPOL

2分钟阅读

viewsIcon

64461

为 MVC3 中的原始类型渲染自定义 HTML 标记。

引言

在本文中,我将介绍 ASP.NET MVC 3 的一个优秀(扩展)功能。 我演示了显示/编辑器模板,这是 MVC 在处理大型项目(用于一致的 UI)时一个非常有用的功能。

MVC 框架足够智能,可以为所有类型的数据(字符串、整数、布尔值等)呈现 HTML,但有时我们希望为我们的项目做一些不同的/特殊的事情(例如,如果我们不想要一个布尔值的复选框,那么我们不能使用 `EditorFor` 方法)。 本文是关于所有类型数据的一致的 HTML 标记。

背景

我个人喜欢探索技术。 当我刚接触 ASP.NET MVC 时,我习惯为每个属性编写自定义编辑器和显示,尽管我知道 `@Html.EditorForModel()`,但它呈现的 HTML 并不熟悉,所以我过去常常这样做:`@Html.TextBox(Mode.value, new {@class="fancyTextbox"})`。

当我们在 MVC 框架中有很棒的功能(`@Html.EditorForModel()` 和 `@Html.DisplayForModel()` 以及 site.css(默认值)可以修改用户界面时,为每个属性生成 HTML 总是很痛苦。

使用代码

在开始编码之前,我必须告诉你

在我的默认 MVC 应用程序文件夹结构中,我必须在 Views/Shared 文件夹中添加 2 个文件夹,这些文件夹将保存我的视图。

  1. DisplayTemplates:此文件夹将包含用于基本属性(默认数据)的只读 HTML 控件
  2. EditorTemplates:此文件夹将包含用于基本属性(默认数据)的可编辑 HTML 控件

注意:请使用相同的命名约定,不仅适用于本文,也适用于整个 MVC 框架。

现在让我们从模型开始,它主要讲述我们将在视图中呈现什么类型的数据。

我将使其易于理解。 所以我使用了两种常见的类型:整数和布尔值。

这是我的模型代码

模型

public class MyModel
{
    public bool boolProp { get; set; }
    public int intProp { get; set; }
}

这是我的控制器代码

它将模型对象传递到视图中

public class HomeController : Controller
{
   public ViewResult CheckMyTemplate()
    {
        MyModel model = new MyModel();
        model .boolProp = true;     
        model.intProp = 10;
        return View(model);
    }  
}    

最后,这是我的视图

显示视图模板

对于布尔类型

视图名称:Boolean.cshtml

@model System.Boolean?

<h2>boolean</h2>
Its a boolean Display Template
<br />Boolean Value : @Model  

对于整数类型

视图名称:Int32.cshtml

@model System.Int32? 
<h2>integer</h2>
Its a integer Display Template 
<br /> Max Value=@((Int32)Model) 

编辑器视图模板

对于布尔类型

为布尔类型显示下拉列表

视图名称:Boolean.cshtml

@Html.DropDownList("", new SelectList( new[] { 
new { Value = "true", Text = "Yes" }, 
new { Value = "false", Text = "No" },
        }, 
        "Value", 
        "Text",
        
        Model
    ))  

对于整数类型

在下拉列表中写入整数值。

视图名称:Int32.cshtml

@model System.Int32? 
<h2>integer</h2>
Its a integer Editor Template
<select name="options" id="options">
@for (int i = 0; i<(Int32)Model; i++ )
{
<option id="">@(i+1)</option>
}
</select> 

注意:我使用 ? 来处理可空值。

编辑器视图必须放置在 EditorTemplates 中,而显示视图必须放置在 DisplayTemplate 中.

关注点

编写对所有模型通用的模板非常有趣且容易,它真的会节省您宝贵的时间。 不仅如此,我们还可以为 `Object`(类)类型创建显示和视图模板。

除此之外,MVC 中还有一个有趣的功能:自定义模型绑定 :)。

© . All rights reserved.