ASP.NET 网页 (Razor) API 快速参考
此页包含一个列表,其中包含使用 Razor 语法对 ASP.NET 网页进行编程的最常用对象、属性和方法的简短示例。
ASP.NET 网页版本 2 中引入了标有“ (v2) ”的说明。
有关 API 参考文档,请参阅 MSDN 上的 ASP.NET 网页参考文档。
软件版本
- ASP.NET 网页 (Razor) 3
本教程还适用于 ASP.NET 网页 2 和 ASP.NET 网页 1.0 (,标记为 v2) 的功能除外。
此页包含以下内容的参考信息:
类
AppState[key], AppState[index],App
包含可由应用程序中的任何页面共享的数据。 可以使用动态 App
属性访问相同的数据,如以下示例所示:
AppState["FavoriteColor"] = "red";
AppState[1] = "apples";
App.MyGreeting = "Good morning";
// Displays the value assigned to AppData[1] in the page.
@App[1]
// Displays the value assigned to App.MyGreeting.
@App.MyGreeting
AsBool(), AsBool(true|false)
将字符串值转换为布尔值 (true/false) 。 如果字符串不表示 true/false,则返回 false 或指定值。
bool b = stringValue.AsBool();
AsDateTime(), AsDateTime(value)
将字符串值转换为日期/时间。 DateTime.MinValue
如果字符串不表示日期/时间,则返回或指定的值。
DateTime dt = stringValue.AsDateTime();
AsDecimal(), AsDecimal(value)
将字符串值转换为十进制值。 如果字符串不表示十进制值,则返回 0.0 或指定的值。
decimal d = stringValue.AsDecimal();
AsFloat(), AsFloat(value)
将字符串值转换为浮点数。 如果字符串不表示十进制值,则返回 0.0 或指定的值。
float d = stringValue.AsFloat();
AsInt(), AsInt(value)
将字符串值转换为整数。 如果字符串不表示整数,则返回 0 或指定的值。
int i = stringValue.AsInt();
Href(path [, param1 [, param2]])
使用可选的附加路径从本地文件路径创建浏览器兼容的 URL。
<a href="@Href("~/Folder/File")">Link to My File</a>
<a href="@Href("~/Product", "Tea")">Link to Product</a>
Html.Raw(value)
将 值 呈现为 HTML 标记,而不是将其呈现为 HTML 编码的输出。
@* Inserts markup into the page. *@
@Html.Raw("<div>Hello <em>world</em>!</div>")
IsBool(), IsDateTime(), IsDecimal(), IsFloat(), IsInt()
如果值可以从字符串转换为指定类型,则返回 true。
var isint = stringValue.IsInt();
IsEmpty()
如果对象或变量没有值,则返回 true。
if (Request["companyname"].IsEmpty()) {
@:Company name is required.<br />
}
IsPost
如果请求是 POST,则返回 true。 (初始请求通常是 GET.)
if (IsPost) { Response.Redirect("Posted"); }
Layout
指定要应用于此页的布局页的路径。
Layout = "_MyLayout.cshtml";
PageData[key], PageData[index],Page
包含当前请求中的页面、布局页和分页之间共享的数据。 可以使用动态 Page
属性访问相同的数据,如以下示例所示:
PageData["FavoriteColor"] = "red";
PageData[1] = "apples";
Page.MyGreeting = "Good morning";
// Displays the value assigned to PageData[1] in the page.
@Page[1]
// Displays the value assigned to Page.MyGreeting.
@Page.MyGreeting
RenderBody()
(布局页面) 呈现不在任何命名节中的内容页的内容。
@RenderBody()
RenderPage(path, values)
RenderPage(path[,param1 [, param2]])
使用指定路径和可选额外数据呈现内容页。 可以按位置 (示例 1) 或键 (示例 2) 获取额外参数 PageData
的值。
RenderPage("_MySubPage.cshtml", "red", 123, "apples")
RenderPage("_MySubPage.cshtml", new { color = "red", number = 123, food = "apples" })
RenderSection(sectionName [, required = true|false])
(布局页面) 呈现具有名称的内容部分。 将 “必需 ”设置为“false”,使节可选。
@RenderSection("header")
Request.Cookies[key]
获取或设置 HTTP Cookie 的值。
var cookieValue = Request.Cookies["myCookie"].Value;
Request.Files[key]
获取在当前请求中上传的文件。
Request.Files["postedFile"].SaveAs(@"MyPostedFile");
Request.Form[key]
获取以字符串 (的形式发布的数据) 。 Request[key]
Request.Form
检查 和 Request.QueryString
集合。
var formValue = Request.Form["myTextBox"];
// This call produces the same result.
var formValue = Request["myTextBox"];
Request.QueryString[key]
获取在 URL 查询字符串中指定的数据。 Request[key]
Request.Form
检查 和 Request.QueryString
集合。
var queryValue = Request.QueryString["myTextBox"];
// This call produces the same result.
var queryValue = Request["myTextBox"];
Request.Unvalidated(key)
Request.Unvalidated().QueryString|Form|Cookies|Headers[key]
选择性地禁用表单元素、查询字符串值、Cookie 或标头值的请求验证。 默认情况下启用请求验证,并阻止用户发布标记或其他潜在危险内容。
// Call the method directly to disable validation on the specified item from
// one of the Request collections.
Request.Unvalidated("userText");
// You can optionally specify which collection the value is from.
var prodID = Request.Unvalidated().QueryString["productID"];
var richtextValue = Request.Unvalidated().Form["richTextBox1"];
var cookie = Request.Unvalidated().Cookies["mostRecentVisit"];
Response.AddHeader(name, value)
将 HTTP 服务器标头添加到响应。
// Adds a header that requests client browsers to use basic authentication.
Response.AddHeader("WWW-Authenticate", "BASIC");
Response.OutputCache(seconds [, sliding] [, varyByParams])
在指定时间内缓存页面输出。 (可选)设置 滑动 以重置每个页面访问的超时,并 设置 varyByParams 以缓存页面请求中每个不同查询字符串的不同页面版本。
Response.OutputCache(60);
Response.OutputCache(3600, true);
Response.OutputCache(10, varyByParams : new[] {"category","sortOrder"});
Response.Redirect(path)
将浏览器请求重定向到新位置。
Response.Redirect("~/Folder/File");
Response.SetStatus(httpStatusCode)
设置发送到浏览器的 HTTP 状态代码。
Response.SetStatus(HttpStatusCode.Unauthorized);
Response.SetStatus(401);
Response.WriteBinary(data [, mimetype])
使用可选 MIME 类型将数据内容 写入响应。
Response.WriteBinary(image, "image/jpeg");
Response.WriteFile(file)
将文件的内容写入响应。
Response.WriteFile("file.ext");
@section(sectionName) {content }
(布局页面) 定义具有名称的内容节。
@section header { <div>Header text</div> }
Server.HtmlDecode(htmlText)
解码 HTML 编码的字符串。
var htmlDecoded = Server.HtmlDecode("<html>");
Server.HtmlEncode(text)
对字符串进行编码,以便在 HTML 标记中呈现。
var htmlEncoded = Server.HtmlEncode("<html>");
Server.MapPath(virtualPath)
返回指定虚拟路径的服务器物理路径。
var dataFile = Server.MapPath("~/App_Data/data.txt");
Server.UrlDecode(urlText)
解码 URL 中的文本。
var urlDecoded = Server.UrlDecode("url%20data");
Server.UrlEncode(text)
对要放入 URL 的文本进行编码。
var urlEncoded = Server.UrlEncode("url data");
Session[key]
获取或设置一个在用户关闭浏览器之前存在的值。
Session["FavoriteColor"] = "red";
ToString()
显示对象的值的字符串表示形式。
<p>It is now @DateTime.Now.ToString()</p>
UrlData[index]
从 URL (获取其他数据,例如 /MyPage/ExtraData) 。
var pathInfo = UrlData[0];
WebSecurity.ChangePassword(userName,currentPassword,newPassword)
更改指定用户的密码。
var success = WebSecurity.ChangePassword("my-username",
"current-password", "new-password");
WebSecurity.ConfirmAccount(accountConfirmationToken)
使用帐户确认令牌确认帐户。
var confirmationToken = Request.QueryString["ConfirmationToken"];
if(WebSecurity.ConfirmAccount(confirmationToken)) {
//...
}
WebSecurity.CreateAccount(userName, password
[, requireConfirmationToken = true|false])
使用指定的用户名和密码创建新的用户帐户。 若要要求确认令牌,请为 requireConfirmationToken 传递 true。
WebSecurity.CreateAccount("my-username", "secretpassword");
WebSecurity.CurrentUserId
获取当前登录用户的整数标识符。
var userId = WebSecurity.CurrentUserId;
WebSecurity.CurrentUserName
获取当前登录用户的名称。
var welcome = "Hello " + WebSecurity.CurrentUserName;
WebSecurity.GeneratePasswordResetToken(username
[, tokenExpirationInMinutesFromNow])
生成密码重置令牌,该令牌可以通过电子邮件发送给用户,以便用户可以重置密码。
var resetToken = WebSecurity.GeneratePasswordResetToken("my-username");
var message = "Visit http://example.com/reset-password/" + resetToken +
" to reset your password";
WebMail.Send(..., message);
WebSecurity.GetUserId(userName)
从用户名返回用户 ID。
var userId = WebSecurity.GetUserId(userName);
WebSecurity.IsAuthenticated
如果当前用户已登录,则返回 true。
if(WebSecurity.IsAuthenticated) {...}
WebSecurity.IsConfirmed(userName)
如果已 (确认用户,则返回 true,例如,通过确认电子邮件) 。
if(WebSecurity.IsConfirmed("joe@contoso.com")) { ... }
WebSecurity.IsCurrentUser(userName)
如果当前用户的名称与指定的用户名匹配,则返回 true。
if(WebSecurity.IsCurrentUser("joe@contoso.com")) { ... }
WebSecurity.Login(userName,password[, persistCookie])
通过在 Cookie 中设置身份验证令牌来记录用户。
if(WebSecurity.Login("username", "password")) { ... }
WebSecurity.Logout()
通过删除身份验证令牌 Cookie 将用户注销。
WebSecurity.Logout();
WebSecurity.RequireAuthenticatedUser()
如果用户未经过身份验证,请将 HTTP 状态设置为 401(未经授权)。
WebSecurity.RequireAuthenticatedUser();
WebSecurity.RequireRoles(roles)
如果当前用户不是指定角色之一的成员,请将 HTTP 状态设置为 401, (未授权) 。
WebSecurity.RequireRoles("Admin", "Power Users");
WebSecurity.RequireUser(userId)
WebSecurity.RequireUser(userName)
如果当前用户不是 用户名指定的用户,请将 HTTP 状态设置为 401 (未授权) 。
WebSecurity.RequireUser("joe@contoso.com");
WebSecurity.ResetPassword(passwordResetToken,newPassword)
如果密码重置令牌有效,请将用户的密码更改为新密码。
WebSecurity.ResetPassword( "A0F36BFD9313", "new-password")
数据
Database.Execute(SQLstatement [,parameters]
使用 INSERT、DELETE 或 UPDATE 等可选参数) (执行 SQLstatement (,并返回受影响的记录计数。
db.Execute("INSERT INTO Data (Name) VALUES ('Smith')");
db.Execute("INSERT INTO Data (Name) VALUES (@0)", "Smith");
Database.GetLastInsertId()
从最近插入的行返回标识列。
db.Execute("INSERT INTO Data (Name) VALUES ('Smith')");
var id = db.GetLastInsertId();
Database.Open(filename)
Database.Open(connectionStringName)
打开指定的数据库文件或使用 Web.config 文件中的命名连接字符串指定的数据库。
// Note that no filename extension is specified.
var db = Database.Open("SmallBakery"); // Opens SmallBakery.sdf in App_Data
// Opens a database by using a named connection string.
var db = Database.Open("SmallBakeryConnectionString");
Database.OpenConnectionString(connectionString)
使用连接字符串打开数据库。 (这与 Database.Open
使用连接字符串名称的 形成鲜明对比。)
var db = Database.OpenConnectionString("Data Source=|DataDirectory|\SmallBakery.sdf");
Database.Query(SQLstatement[,parameters])
使用 SQLstatement 查询数据库, (选择性地) 传递参数,并将结果作为集合返回。
foreach (var result in db.Query("SELECT * FROM PRODUCT")) {<p>@result.Name</p>}
foreach (var result = db.Query("SELECT * FROM PRODUCT WHERE Price > @0", 20))
{ <p>@result.Name</p> }
Database.QuerySingle(SQLstatement [, parameters])
使用可选参数) 执行 SQLstatement (,并返回一条记录。
var product = db.QuerySingle("SELECT * FROM Product WHERE Id = 1");
var product = db.QuerySingle("SELECT * FROM Product WHERE Id = @0", 1);
Database.QueryValue(SQLstatement [, parameters])
使用可选参数) 执行 SQLstatement (,并返回单个值。
var count = db.QueryValue("SELECT COUNT(*) FROM Product");
var count = db.QueryValue("SELECT COUNT(*) FROM Product WHERE Price > @0", 20);
帮助程序
Analytics.GetGoogleHtml(webPropertyId)
呈现指定 ID 的 Google Analytics JavaScript 代码。
@Analytics.GetGoogleHtml("MyWebPropertyId")
Analytics.GetStatCounterHtml(project,security)
呈现指定项目的 StatCounter Analytics JavaScript 代码。
@Analytics.GetStatCounterHtml(89, "security")
Analytics.GetYahooHtml(account)
呈现指定帐户的 Yahoo Analytics JavaScript 代码。
@Analytics.GetYahooHtml("myaccount")
Bing.SearchBox([boxWidth])
将搜索传递给必应。 若要指定要搜索的网站和搜索框的标题,可以设置 Bing.SiteUrl
和 Bing.SiteTitle
属性。 通常,可以在 _AppStart 页中设置这些属性。
@Bing.SearchBox() @* Searches the web.*@
@{
Bing.SiteUrl = "www.asp.net"; @* Limits search to the www.asp.net site. *@
}
@Bing.SearchBox()
Chart(width,height [, template] [, templatePath])
初始化图表。
@{
var myChart = new Chart(width: 600, height: 400);
}
Chart.AddLegend([title] [, name])
向图表添加图例。
@{
var myChart = new Chart(width: 600, height: 400)
.AddLegend("Basic Chart")
.AddSeries(
name: "Employee",
xValue: new[] { "Peter", "Andrew", "Julie", "Mary", "Dave" },
yValues: new[] { "2", "6", "4", "5", "3" })
.Write();
}
Chart.AddSeries([name] [, chartType] [, chartArea]
[, axisLabel] [, legend] [, markerStep] [, xValue]
[, xField] [, yValues] [, yFields] [, options])
向图表添加一系列值。
@{
var myChart = new Chart(width: 600, height: 400)
.AddSeries(
name: "Employee",
xValue: new[] { "Peter", "Andrew", "Julie", "Mary", "Dave" },
yValues: new[] { "2", "6", "4", "5", "3" })
.Write();
}
Crypto.Hash(string [, algorithm])
Crypto.Hash(bytes [, algorithm])
返回指定数据的哈希。 默认算法为 sha256
。
@Crypto.Hash("data")
Facebook.LikeButton(href [, buttonLayout] [, showFaces] [, width] [, height]
[, action] [, font] [, colorScheme] [, refLabel])
允许 Facebook 用户与页面建立连接。
@Facebook.LikeButton("www.asp.net")
FileUpload.GetHtml([initialNumberOfFiles] [, allowMoreFilesToBeAdded]
[, includeFormTag] [, addText] [, uploadText])
呈现用于上传文件的 UI。
@FileUpload.GetHtml(initialNumberOfFiles:1, allowMoreFilesToBeAdded:false,
includeFormTag:true, uploadText:"Upload")
GamerCard.GetHtml(gamerTag)
呈现指定的 Xbox 玩家标记。
@GamerCard.GetHtml("joe")
Gravatar.GetHtml(email [, imageSize] [, defaultImage] [, rating]
[, imageExtension] [, attributes])
呈现指定电子邮件地址的 Gravatar 图像。
@Gravatar.GetHtml("joe@contoso.com")
Json.Encode(object)
将数据对象转换为采用 JavaScript 对象表示法 (JSON) 格式的字符串。
var myJsonString = Json.Encode(dataObject);
Json.Decode(string)
将 JSON 编码的输入字符串转换为可以循环访问或插入到数据库中的数据对象。
var myJsonObj = Json.Decode(jsonString);
LinkShare.GetHtml(pageTitle[, pageLinkBack] [, twitterUserName]
[, additionalTweetText] [, linkSites])
使用指定的标题和可选 URL 呈现社交网络链接。
@LinkShare.GetHtml("ASP.NET Web Pages Samples")
@LinkShare.GetHtml("ASP.NET Web Pages Samples", "http://www.asp.net")
ModelStateDictionary.AddError(key, errorMessage)
将错误消息与窗体域相关联。 使用 ModelState
帮助程序访问此成员。
ModelState.AddError("email", "Enter an email address");
ModelStateDictionary.AddFormError(errorMessage)
将错误消息与窗体相关联。 使用 ModelState
帮助程序访问此成员。
ModelState.AddFormError("Password and confirmation password do not match.");
ModelStateDictionary.IsValid
如果没有验证错误,则返回 true。 使用 ModelState
帮助程序访问此成员。
if (ModelState.IsValid) { // Save the form to the database }
ObjectInfo.Print(value [, depth] [, enumerationLength])
呈现对象和任何子对象的属性和值。
@ObjectInfo.Print(person)
Recaptcha.GetHtml([, publicKey] [, theme] [, language] [, tabIndex])
呈现 reCAPTCHA 验证测试。
@ReCaptcha.GetHtml()
ReCaptcha.PublicKey
ReCaptcha.PrivateKey
设置 reCAPTCHA 服务的公钥和私钥。 通常,在 _AppStart 页中设置这些属性。
ReCaptcha.PublicKey = "your-public-recaptcha-key";
ReCaptcha.PrivateKey = "your-private-recaptcha-key";
ReCaptcha.Validate([, privateKey])
返回 reCAPTCHA 测试的结果。
if (ReCaptcha.Validate()) {
// Test passed.
}
ServerInfo.GetHtml()
呈现有关 ASP.NET 网页的状态信息。
@ServerInfo.GetHtml()
Twitter.Profile(twitterUserName)
为指定用户呈现 Twitter 流。
@Twitter.Profile("billgates")
Twitter.Search(searchQuery)
呈现指定搜索文本的 Twitter 流。
@Twitter.Search("asp.net")
Video.Flash(filename [, width, height])
呈现具有可选宽度和高度的指定文件的 Flash 视频播放器。
@Video.Flash("test.swf", "100", "100")
Video.MediaPlayer(filename [, width, height])
为具有可选宽度和高度的指定文件呈现 Windows Media 播放器。
@Video.MediaPlayer("test.wmv", "100", "100")
Video.Silverlight(filename, width, height)
呈现具有所需宽度和高度的指定 .xap 文件的 Silverlight 播放器。
@Video.Silverlight("test.xap", "100", "100")
WebCache.Get(key)
返回 由键指定的对象,如果未找到该对象,则返回 null。
var username = WebCache.Get("username")
WebCache.Remove(key)
从缓存中删除 由键 指定的 对象。
WebCache.Remove("username")
WebCache.Set(key, value [, minutesToCache] [, slidingExpiration])
将 值 放入 由键指定的名称下的缓存中。
WebCache.Set("username", "joe@contoso.com ")
WebGrid(data)
使用查询中的数据创建新的 WebGrid
对象。
var db = Database.Open("SmallBakery");
var grid = new WebGrid(db.Query("SELECT * FROM Product"));
WebGrid.GetHtml()
呈现标记以在 HTML 表中显示数据。
@grid.GetHtml()// The 'grid' variable is set when WebGrid is created.
WebGrid.Pager()
呈现 对象的寻呼程序 WebGrid
。
@grid.Pager() // The 'grid' variable is set when WebGrid is created.
WebImage(path)
从指定路径加载图像。
var image = new WebImage("test.png");
WebImage.AddImagesWatermark(image)
将指定的图像添加为水印。
WebImage photo = new WebImage("test.png");
WebImage watermarkImage = new WebImage("logo.png");
photo.AddImageWatermark(watermarkImage);
WebImage.AddTextWatermark(text)
将指定的文本添加到图像。
image.AddTextWatermark("Copyright")
WebImage.FlipHorizontal()
WebImage.FlipVertical()
水平或垂直翻转图像。
image.FlipHorizontal();
image.FlipVertical();
WebImage.GetImageFromRequest()
在文件上传过程中将图像发布到页面时加载图像。
var image = WebImage.GetImageFromRequest();
WebImage.Resize(width,height)
调整图像的大小。
image.Resize(100, 100);
WebImage.RotateLeft()
WebImage.RotateRight()
将图像向左或向右旋转。
image.RotateLeft();
image.RotateRight();
WebImage.Save(path [, imageFormat])
将映像保存到指定路径。
image.Save("test.png");
WebMail.Password
设置 SMTP 服务器的密码。 通常,在 _AppStart 页中设置此属性。
WebMail.Password = "password";
WebMail.Send(to, subject, body [, from] [, cc] [, filesToAttach] [, isBodyHtml]
[, additionalHeaders])
发送电子邮件。
WebMail.Send("touser@contoso.com", "subject", "body of message",
"fromuser@contoso.com");
WebMail.SmtpServer
设置 SMTP 服务器名称。 通常,在 _AppStart 页中设置此属性。
WebMail.SmtpServer = "smtp.mailserver.com";
WebMail.UserName
设置 SMTP 服务器的用户名。 通常,应在 _AppStart 页中设置此属性。
WebMail.UserName = "Joe";
验证
Html.ValidationMessage(field)
(v2) 为指定字段呈现验证错误消息。
<input type="text"
name="dateOfBirth"
value="" />
@Html.ValidationMessage("dateOfBirth")
Html.ValidationSummary([message])
(v2) 显示所有验证错误的列表。
@Html.ValidationSummary()
@Html.ValidationSummary("The following validation errors occurred:")
Validation.Add(field, validationType)
(v2) 为指定的验证类型注册用户输入元素。
Validation.Add("dateOfBirth", Validator.DateTime("Date of birth was not valid"));
Validation.Add("quantity", Validator.Integer("Enter a number"));
Validation.Add("confirmPassword",
Validator.EqualsTo("password", "Passwords must match."));
Validation.ClassFor(field)
(v2) 动态呈现用于客户端验证的 CSS 类属性,以便设置验证错误消息的格式。 (要求引用适当的客户端脚本库并定义 CSS classs.)
<head>
<script
src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.js">
</script>
<script
src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.8.1/jquery.validate.js">
</script>
<script
src="~/Scripts/jquery.validate.unobtrusive.js">
</script>
<style>
input-validation-error{ /* style rules */ }
field-validation-error{ /* style rules */ }
validation-summary-errors{ /* style rules */ }
field-validation-valid{ /* style rules */ }
input-validation-valid{ /* style rules */ }
validation-summary-valid{ /* style rules */ }
</style>
</head>
...
<input
type="text"
name="firstName"
@Validation.For("firstName") @Validation.ClassFor("firstName") />
Validation.For(field)
(v2) 为用户输入字段启用客户端验证。 (要求引用相应的客户端脚本库。)
<head>
<script
src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.js">
</script>
<script
src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.8.1/jquery.validate.js">
</script>
<script
src="~/Scripts/jquery.validate.unobtrusive.js">
</script>
</head>
...
<input
type="text"
name="firstName"
@Validation.For("firstName") />
Validation.IsValid()
(v2) 如果注册进行验证的所有用户输入元素都包含有效值,则返回 true。
if(IsPost){
if (Validation.IsValid()) {
// Process input
}
}
Validation.RequireField(field[, errorMessage])
(v2) 指定用户必须为用户输入元素提供值。
Validation.RequireField("dateOfBirth", "Date of birth is required");
Validation.RequireFields(field1[, field12, field3, ...])
(v2) 指定用户必须为每个用户输入元素提供值。 此方法不允许指定自定义错误消息。
Validation.RequireFields("firstName", "lastName", "dateOfBirth");
Validator.DateTime ([error message])
Validator.Decimal([error message])
Validator.EqualsTo(otherField,[error message])
Validator.Float([error message])
Validator.Integer([error message])
Validator.Range(min,max [, error message])
Validator.RegEx(pattern[, error message])
Validator.Required([error message])
Validator.StringLength(length)
Validator.Url([error message])
(v2) 指定使用 Validation.Add
方法时的验证测试。
Validation.Add("dateOfBirth", Validator.DateTime("Date of birth was not valid"));
Validation.Add("quantity", Validator.Integer("Enter a number"));
Validation.Add("confirmPassword", Validator.EqualsTo("password",
"Passwords must match."));