2011-01-13 6 views
0

Also hatte ich viel Hilfe hier, um diese Methode zu erstellen und es zum Laufen zu bringen ... aber da dies jemand anderes ist, dachte ich, ich würde eine andere Frage daraus machen.Fehler beim Übergeben des Arrays in die Erweiterung HTML Helper

Zuerst hatte ich eine HTML-Hilfserweiterungsmethode, die funktionierte, indem ich eine zusätzliche Zeichenfolge übergab, um eine Berechtigung zu bestimmen, nach der ich in der Erweiterung suchte. Ich möchte jetzt in einer Reihe von Strings (Berechtigungen) und Schleife durch sie in der Methode zu übergeben, aber ich diesen Fehler:

CS1501: Keine Überladung für Methode ‚CheckBoxForWithPermission‘ dauert 4 Argumente

Hier ist der Aufruf des Helfers:

<%= Html.CheckBoxForWithPermission(m => m.Current, new string[] { Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced }, Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced, new { @class = "economicTextBox", propertyName = "Current", onchange = "UseCurrent();UpdateField(this);" })%> 

Und hier ist die eigentliche Methode:

// CHECKBOX WITH PERMISSIONS 
     // WITHOUT -- READONLY 
     public static MvcHtmlString CheckBoxForWithPermission<TModel>(
                  this HtmlHelper<TModel> htmlHelper, 
                  Expression<Func<TModel, bool>> expression, 
                  string[] permissions, 
                  object htmlAttributes 
                 ) 
     { 
      foreach (string permission in permissions) 
      { 
       if (Chatham.Web.UI.Extranet.SessionManager.PhysicalUser.IsInRole(permission)) 
       { 
        // the user has the permission => render the checkbox 
        return htmlHelper.CheckBoxFor(expression, htmlAttributes); 
       } 
      } 
      // the user has no permission => render a readonly checkbox 
      var mergedHtmlAttributes = new RouteValueDictionary(htmlAttributes); 
      mergedHtmlAttributes["disabled"] = "disabled"; 
      return htmlHelper.CheckBoxFor(expression, mergedHtmlAttributes); 
     } 

Antwort

1

Dieses Bit wie das Problem aussieht:

new string[] { 
    Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced 
}, 
Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced 

denke ich, dass sein sollte:

new string[] { 
    Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced,  
    Chatham.Web.Business.Definitions.Constants.PERMISSIONS.hasICAdvanced 
} 

Ihr aktueller Code versucht, mit einer Genehmigung in einem Array zu übergeben, und dann noch eine einzelne Saite ... während vermutlich Sie bedeuteten in passieren ein Array mit beiden Berechtigungen.

Nachdem gesagt, beide Berechtigungen sind hier gleich ... das sieht auch unbeabsichtigt aus. Welche Berechtigungen waren Sie versuchen zu verwenden?

(Nur aus Interesse, aus Gründen der Lesbarkeit - können Sie nicht eine using-Direktive hinzufügen Sie nur PERMISSIONS.hasICAdvanced verweisen lassen?)

+0

ich so ein Idiot bin. Mein Kopf ist heute nicht im Spiel. Vielen Dank. – slandau