将数组传递到扩展HTML Helper时出错

时间:2011-01-13 19:49:46

标签: c# .net asp.net-mvc-2 extension-methods html-helper

所以我在这里有很多帮助来创建这个方法并让它工作......但由于这是不同的人,我想我会从中提出另一个问题。

首先,我有一个HTML Helper扩展方法,通过传入一个额外的字符串来确定我在扩展中检查过的权限。我现在想要传入一个字符串数组(权限),并在方法中循环它们,但我收到此错误:

CS1501:方法'CheckBoxForWithPermission'没有重载需要4个参数

这是帮助者的召唤:

<%= 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);" })%>

这是实际的方法:

// 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);
        }

1 个答案:

答案 0 :(得分:1)

这个看起来像问题:

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

我认为应该是:

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

您当前的代码尝试传入一个拥有一个权限的数组,然后传递另一个单个字符串...而大概是意味着传入一个具有这两种权限的数组。

话虽如此,这两个权限都是一样的......看起来也是无意的。您尝试使用哪些权限?

(出于兴趣,为了便于阅读 - 你不能添加一个using指令让你只是引用PERMISSIONS.hasICAdvanced吗?)