允许的用户列表中或允许的角色成员。例如,如下代码仅允许2 个指定的用户,“scottgu”和“billg” 访
问/Dinners/Create 路径:
[Authorize(Users="scottgu,billg")]
public ActionResult Create() {
...
}
将特定的用户名直接写在代码中不易于将来的代码维护,更好的办法是定义一个roles(角色),然后通
过数据库或者活动目录(Active Directory)映射用户到角色中。ASP.NET 提供了一个内置的角色管理API
和一组内置的Role provider(包括SQL 和活动目录),帮助实现用户/角色的映射。我们接着更新代码,
仅允许admin 角色的用户访问/Dinners/Create URL。
[Authorize(Roles="admin")]
public ActionResult Create() {
...
}
2.public bool IsUserRegistered(string userName) {
return RSVPs.Any(r => r.AttendeeName.Equals(userName,
StringComparison.InvariantCultureIgnoreCase));
3.<% if (Request.IsAuthenticated) { %>
3.
dinner.RSVPs.Add(myRSVP);//添加一条RSVP表的记录,dinners表跟RSVP表式主外键的关系
4.
public ActionResult Index() {
var dinners = dinnerRepository.FindUpcomingDinners().ToList();
return View("Index", dinners);
5.首先将光标定位在一个controller action 方法体中,然后右键点击,在弹出菜单中选择Add View 菜单项,
就可以创建一个新的视图模板了
6.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues) {
...
}
当对重载的action 方法添加[AcceptVerbs] 属性后,ASP.NET MVC 根据进来的HTTP 动作,自动分发请求
给合适的action 方法。HTTP POST 请求/Dinners/Edit/[id] 将由上述Edit 方法负责处理,然而所有其他的
HTTP 请求/Dinners/Edit/[id] 将由之前定义的Edit 方法负责(该方法没有[AcceptVerbs]属性)
7.
Controller 类有一个ModelState 属性集合,可以用来提示传递到视图的model 对象是否有错误。ModelState
ASP.NET MVC Framework Step by Step 中文版
http://www.agiledon.com 制作; 本中文版来源于http://blog.entlib.com/entlibforum/Default.aspx; AgileDon 修订排版
中Error 记录识别模型属性的名称和错误信息,并允许指定友好的错误信息。
创建partial view模板,命名为DinnerForm.ascx,具体操作:
Views/Dinners右键选择Add->view,在弹出的Add View对话框中,对新的视图命名DinnerForm,并选择Create a partial view复选框,并指明将传入DinnerFormViewModel类,再点击Add按钮。
调用方法1.<% Html.RenderPartial("DinnerForm")%> 2.<% Html.RenderPartial("~Views/Dinners/DinnerForm.ascx")%>
.ToList()返回的是ActionResult类型,linq语句返回的是IQueryable<T>类型。
(int? page) .Skip((page??0)*pageSize) //C#操作符??,该操作在处理nullable类型时,如果page参数为空null,则对page赋值为0
添加[Authorize]过滤器属性到指定的方法上,如果它没有带任何参数,则强制要求用户请求action方法时必须登录,否则重定向到登陆页面。当重定向时,原来的请求url会作为querystring参数跟在url后面,在登录完成后再次重定向用户返回开始请求的页面。
在查询当前登录的用户名时,我们可以使用Controller基类公开的User.Identity.Name属性
public bool IsUserRegistered(string userName){
return RSVPs.Any(r => r.AttendeeName.Equals(userName,StringComparison.InvariantCultureIgnoreCase));
}
return Content("Thanks1"); //返回的类型是ActionResult
创建接口文件:
将光标定位到已经实现方法的类中,右键选择Refactor->Extract Interface,随后将弹出对话框并自动选择类中的所有公共的方法
创建实现接口方法的类文件(正好是上面的相反操作):
右键点击冒号后的接口->选择Implement interface '接口名'