辅助器方法(Helper Method),其作用是对代码块和标记进行打包,以便能够在整个MVC框架应用程序中重用。
首先新建一个项目,添加一个Home控制器,如下图所示:
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
ViewBag.Fruits = new string[] { "Apple", "Orange", "Pear" };
ViewBag.Cities = new string[] { "New York","London","Paris"};
string message = "This is an HTML element:<input>";
return View((object)message);
}
}
对应的视图Index.cshtml页面,代码如下图所示:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
Here are the fruites:
@foreach (string str in (string [])ViewBag.Fruits)
{
<b>@str</b>
}
</div>
<div>
Here are the cities:
@foreach (string str in (string [])ViewBag.Cities)
{
<b>@str</b>
}
</div>
<div>
Here is the message:
<p>@Model</p>
</div>
</body>
</html>
运行效果如下图所示:
创建内联的自定义辅助器方法
修改Index.cshtml页面,代码如下图所示:
@{
Layout = null;
}
@helper ListArrayItems(string [] items) {
foreach (string str in items)
{
<b>@str</b>
}
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
Here are the fruites:@ListArrayItems(ViewBag.Fruits)
</div>
<div>
Here are the cities:@ListArrayItems(ViewBag.Cities)
</div>
<div>
Here is the message:
<p>@Model</p>
</div>
</body>
</html>
在上述代码中,定义了一个名称为ListArrayItems的辅助器,它以一个字符串数组为参数。 虽然内联辅助器看上去像一个方法。但是它没有返回值。这种办法的好处是,如果希望改变数组内容显示的方式,只需要一处修改,如下图所示:
@helper ListArrayItems(string [] items) {
<ul>
@foreach (string str in items)
{
<li>@str</li>
}
</ul>
}
运行效果如下图所示:
创建外部辅助器方法
内联辅助器是方便的,但是只能在声明它们的视图之中使用,而且,如果内联辅助器太复杂,可能会占据视图,影响阅读。这时就可以用到外部辅助器方法。在项目中添加一个Infrastructure文件夹,并创建一个新的类文件CustomHelp.cs,如下图所示: