2012-02-03 19 views
6

HtmlHelper.ActionLinkの単純な拡張を作成して、ルート値辞書に値を追加したいとします。パラメータはすなわち、HtmlHelper.ActionLinkと同一である。:HtmlHelper拡張メソッドのrouteValuesに追加

public static MvcHtmlString FooableActionLink(
    this HtmlHelper html, 
    string linkText, 
    string actionName, 
    string controllerName, 
    object routeValues, 
    object htmlAttributes) 
{ 
    // Add a value to routeValues (based on Session, current Request Url, etc.) 
    // object newRouteValues = AddStuffTo(routeValues); 

    // Call the default implementation. 
    return html.ActionLink(
     linkText, 
     actionName, 
     controllerName, 
     newRouteValues, 
     htmlAttributes); 
} 

私はrouteValuesに追加してい何のための論理拡張メソッドヘルパーではなく、各ビューでそれを繰り返すそれを置くので、私の願望、やや冗長です。

私は(下記の答えとして掲載)動作しているようだソリューションを持っていますが、:

  • このような単純な作業のために、不必要に複雑であると思われます。
  • 私は、NullReferenceExceptionや何かを引き起こしているいくつかのエッジケースのように、すべてのキャスティングが壊れやすいと私に警告します。

改善や改善のための提案を投稿してください。興味のある方は

答えて

10
public static MvcHtmlString FooableActionLink(
    this HtmlHelper html, 
    string linkText, 
    string actionName, 
    string controllerName, 
    object routeValues, 
    object htmlAttributes) 
{ 
    // Convert the routeValues to something we can modify. 
    var routeValuesLocal = 
     routeValues as IDictionary<string, object> 
     ?? new RouteValueDictionary(routeValues); 

    // Convert the htmlAttributes to IDictionary<string, object> 
    // so we can get the correct ActionLink overload. 
    IDictionary<string, object> htmlAttributesLocal = 
     htmlAttributes as IDictionary<string, object> 
     ?? new RouteValueDictionary(htmlAttributes); 

    // Add our values. 
    routeValuesLocal.Add("foo", "bar"); 

    // Call the correct ActionLink overload so it converts the 
    // routeValues and htmlAttributes correctly and doesn't 
    // simply treat them as System.Object. 
    return html.ActionLink(
     linkText, 
     actionName, 
     controllerName, 
     new RouteValueDictionary(routeValuesLocal), 
     htmlAttributesLocal); 
} 
+0

は、私はこの答えに関連している、この質問をしていますhttp://stackoverflow.com/questions/9595334/correctly-making-an-actionlink-extension-with-htmlattributes –

関連する問題