当想经过Html.EditorFor()给文本框加上maxlength,placeholder等属性的时候,发现Html.EditorFor()没有提供可直接加上这些属性的重载方法,如何作到呢?css
□ 思路html
一、Html.EditorFor()有一个重载方法以下:spa
也许,能够把须要给文本框加上的属性(maxlength, placeholder,etc),封装成一个匿名对象,做为路由数据传递给一个模版。code
二、Html.TextBox()正好有一个重载能够把路由数据做为它的htmlAttributes参数:orm
首先,在Views/Shared/下建立EditorTemplates文件夹,并在EditorTemplates文件夹下建立部分视图string.cshtmlhtm
@model string
<span>
@Html.TextBox("", @ViewData.TemplateInfo.FormattedModelValue, @ViewData)
</span>
而后,建立一个View Model:对象
namespace MvcApplication1.Models
{
public class Sample
{
public string Name { get; set; }
}
}
接着,控制器方法把强类型model传递到对应的视图中:blog
using System.Web.Mvc;
using MvcApplication1.Models;
namespace MvcApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new Sample());
}
}
}
最后,在强类型视图页,把须要给文本框加上的属性封装成匿名对象,做为路由数据传递给模版页。路由
@model MvcApplication1.Models.Sample
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@Html.EditorFor(s => s.Name,"string",new {maxlength=5,placeholder="用户名"})
□ 结果rem
因为有了placeholder,显示水印:
因为有了maxlength,最多只能输入5个字符:
在html代码中的input有了maxlength和placeholder属性:
□ 总结
Html.EditorFor()自己没有给input附加上属性的重载方法,只好把须要给input附加上的属性封装成匿名对象,做为路由数据交给模版视图页,在模版视图页Html.TextBox()把接收到的路由数据做为它的属性参数,最终显示出来。