1. 程式人生 > >ASP.NET MVC CodePlex Preview 4 Installer + Source + Changed

ASP.NET MVC CodePlex Preview 4 Installer + Source + Changed

下載連線

Pv3-Codeplex Pv4之間的差異:
ViewPage
ViewPage類
增加了InitHelpers方法

Controller
Controller類
 新實現了IAuthorizationFilter/IExceptionFilter介面
添加了 public ITempDataProvider TempDataProvider { get; set; } 屬性
ControllerActionInvoker類
新增加了四個方法:
FilterInfo GetFiltersForActionMethod(MethodInfo methodInfo);
ResultExecutedContext InvokeActionResultWithFilters(ActionResult actionResult, IList<IResultFilter>
filters);
AuthorizationContext InvokeAuthorizationFilters(MethodInfo methodInfo, IList<IAuthorizationFilter>
filters);
ExceptionContext InvokeExceptionFilters(Exception exception, IList<IExceptionFilter> filters);
刪除了原有的:
IList<IActionFilter> GetActionFiltersForMember(MemberInfo memberInfo);
IList<IActionFilter> GetAllActionFilters(MethodInfo methodInfo);
ResultExecutedContext InvokeActionResultWithFilters(ActionResult actionResult, IList<IActionFilter>
filters);
ControllerBuilder 類

增加了屬性public HashSet<String> DefaultNamespaces { get; }
ExceptionContext類
這是一個新增加的類,我想,可以用來輸出美化的異常處理,呵呵
publicclass ExceptionContext : ControllerContext 
        
public ExceptionContext(ControllerContext controllerContext, Exception exception); 
 
        
public ActionResult Result 
getset; } 
        
public Boolean ExceptionHandled getset; } 
        
public Exception Exception get; } 
}

屬性程式設計與Filter中
IActionFilter介面
刪除了以下兩個事件
void OnResultExecuted(ResultExecutedContext filterContext);
void OnResultExecuting(ResultExecutingContext filterContext);

ActionExecutedContext類
的建構函式改為
ActionExecutedContext(ControllerContext controllerContext, MethodInfo actionMethod, Boolean canceled, Exception
exception)
增加了public Boolean Canceled { get; }只讀屬性

ActionFilterAttribute 類
由繼承於Attribute 改為繼承於FilterAttribute,另外增加實現IResultFilter介面
刪除了 Order 屬性

另外新增加了幾個類,有關用Action的Filter
publicabstractclass FilterAttribute : Attribute 
        
protected FilterAttribute(); 
 
        
public Int32 Order getset; } 
    }
 
 
    
publicclass FilterInfo 
        
public FilterInfo(); 
 
        
public IList<IActionFilter> ActionFilters getset; } 
        
public IList<IAuthorizationFilter> AuthorizationFilters getset; } 
        
public IList<IExceptionFilter> ExceptionFilters getset; } 
        
public IList<IResultFilter> ResultFilters getset; } 
    }
 
 
    
publicsealedclass HandleErrorAttribute : FilterAttribute, IExceptionFilter 
        
public HandleErrorAttribute(); 
 
        
public String View getset; } 
        
public Type ExceptionType getset; } 
   }
 
 
    
publicclass HandleErrorInfo 
        
public HandleErrorInfo(Exception exception, String controller, String action); 
 
        
public Exception Exception get; } 
        
public String Action get; } 
        
public String Controller get; } 
    }
 
 
    
publicclass HttpUnauthorizedResult : ActionResult 
        
public HttpUnauthorizedResult(); 
    }
還有一些我看來比較有用的類
publicinterface IAuthorizationFilter //用來獲取使用者資訊的FIlter介面
void OnAuthorization(AuthorizationContext filterContext); 
    }
 
 
    
publicinterface IExceptionFilter //用來獲取異常的FIlter介面
void OnException(ExceptionContext filterContext); 
    }
 
 
    
publicenum InsertionMode //感覺有點像觸發器的感覺 ,這個Enum所標誌的那個類一定很好用呵呵 
        Replace, 
        InsertBefore, 
        InsertAfter 
    }
 
 
    
publicinterface IResultFilter //這個應該是新的Filter介面
void OnResultExecuted(ResultExecutedContext filterContext); 
        
void OnResultExecuting(ResultExecutingContext filterContext); 
    }
 
 
    
publicinterface ITempDataProvider 
        TempDataDictionary LoadTempData(); 
        
void SaveTempData(TempDataDictionary tempDataDictionary); 
    }

對於Helper中
AjaxExtensions靜態類
是新增加的,程式碼如下:
publicstaticclass AjaxExtensions { 
        
publicstatic Boolean IsMvcAjaxRequest(HttpRequestBase request); 
    }
LinkExtensions類
Mailto方法都被刪除了
AjaxHelper類
這個算是改動最大添加了一些比較有用的實現
publicclass AjaxHelper 
        
public String ActionLink(String linkText, String actionName, AjaxOptions ajaxOptions); 
        
public String ActionLink(String linkText, String actionName, String controllerName, AjaxOptions ajaxOptions); 
        
public String ActionLink(String linkText, String actionName, Object values, AjaxOptions ajaxOptions); 
        
public String ActionLink(String linkText, String actionName, RouteValueDictionary values, AjaxOptions ajaxOptions); 
        
public String ActionLink(String linkText, String actionName, String controllerName, RouteValueDictionary values, 
AjaxOptions ajaxOptions); 
        
public String ActionLink(String linkText, String actionName, Object values, AjaxOptions ajaxOptions, Object 
htmlAttributes); 
        
public String ActionLink(String linkText, String actionName, RouteValueDictionary values, AjaxOptions ajaxOptions, 
IDictionary
<String,Object> htmlAttributes); 
public String ActionLink(String linkText, String actionName, String controllerName, Object values, AjaxOptions 
ajaxOptions); 
        
public String ActionLink(String linkText, String actionName, String controllerName, RouteValueDictionary values, 
AjaxOptions ajaxOptions, IDictionary
<String,Object> htmlAttributes); 
        
public String ActionLink(String linkText, String actionName, String controllerName, Object values, AjaxOptions 
ajaxOptions, Object htmlAttributes); 
        
public IDisposable Form(String actionName, AjaxOptions ajaxOptions); 
        
public IDisposable Form(String actionName, Object values, AjaxOptions ajaxOptions); 
        
public IDisposable Form(String actionName, RouteValueDictionary values, AjaxOptions ajaxOptions); 
        
public IDisposable Form(String actionName, String controllerName, AjaxOptions ajaxOptions); 
        
public IDisposable Form(String actionName, String controllerName, RouteValueDictionary values, AjaxOptions ajaxOptions); 
        
public IDisposable Form(String actionName, Object values, AjaxOptions ajaxOptions, Object htmlAttributes); 
        
public IDisposable Form(String actionName, RouteValueDictionary values, AjaxOptions ajaxOptions, 
IDictionary
<String,Object> htmlAttributes); 
        
public IDisposable Form(String actionName, String controllerName, Object values, AjaxOptions ajaxOptions); 
        
public IDisposable Form(String actionName, String controllerName, Object values, AjaxOptions ajaxOptions, Object 
htmlAttributes); 
        
public IDisposable Form(String actionName, String controllerName, RouteValueDictionary valuesDictionary, AjaxOptions 
ajaxOptions, IDictionary
<String,Object> htmlAttributes); 
    }
另外因此而增加了一些對AjaxHelper輔助的類

publicclass AjaxOptions 
        
public AjaxOptions(); 
 
        
public InsertionMode InsertionMode getset; } 
        
public String OnBegin getset; } 
        
public String OnFailure getset; } 
        
public String OnSuccess getset; } 
        
public String UpdateTargetId getset; } 
    }
儲存系統
TempDataDictionary 類
設定為可以序列化
添加了Load和Save方法,並給了一個可以反序列化初始化的建構函式
ViewDataDictionary類
增加了個public Object Eval(String expression); 方法
MemberShip
對於微軟自己的角色控制,有2個類被新增
publicclass AuthorizationContext : ControllerContext //看來是用來在Membership得到Action資訊
public AuthorizationContext(ControllerContext controllerContext, MethodInfo actionMethod); 
 
        
public ActionResult Result getset; } 
        
public Boolean Cancel getset; } 
        
public MethodInfo ActionMethod get; } 
    }
 
publicsealedclass AuthorizeAttribute : FilterAttribute, IAuthorizationFilter //這個是在Controller中獲取使用者資訊的應該是的,呵呵
public AuthorizeAttribute(); 
 
        
public String Roles getset; } 
        
public String Users getset; }