无效的匿名类型成员声明符。匿名......?

时间:2012-08-29 06:58:47

标签: asp.net-mvc-3 razor html-helper

我正在构建一个htmlhelper扩展,但收到此错误:

无效的匿名类型成员声明符。必须声明匿名类型成员 具有成员分配,简单名称或成员访问权。

我试图将@ User.IsInRole强制转换为布尔值,但无济于事:(

这是Razor标记:

@using htmlHelperstring.Models
@{
    ViewBag.Title = "Home Page";

}

<ul>
    @Html.MyActionLink(
    "<span>Hello World</span>", 
    "about", 
    "home",
    new { id = "123" },
    new { @class = "foo",(bool)(@User.IsInRole("Chef"))}
)
</ul>

助手:

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace htmlHelperstring.Models
{
    public static class LabelExtensions
    {
        public static IHtmlString MyActionLink(
        this HtmlHelper htmlHelper,
        string linkText,
        string action,
        string controller,
        object routeValues,
        object htmlAttributes,
            bool UserAuthorized
    )
        {
            var li = new TagBuilder("li");
            if (UserAuthorized)
            {
                var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
                var anchor = new TagBuilder("a");
                anchor.InnerHtml = linkText;
                anchor.Attributes["href"] = urlHelper.Action(action, controller, routeValues);
                anchor.MergeAttributes(new RouteValueDictionary(htmlAttributes));
                li.InnerHtml = anchor.ToString();
            }
            else
            {
                li.InnerHtml = string.Empty;
            }
            return MvcHtmlString.Create(li.ToString());
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您似乎错过了以下成员作业:

new { @class = "foo",(bool)(@User.IsInRole("Chef"))} 

您想将布尔值分配给?

你需要这样的东西:

new { @class = "foo", HTMLATTRIBUTENAME = (bool)(@User.IsInRole("Chef"))} 

将HTMLATTRIBUTENAME替换为您要设置的属性名称。

答案 1 :(得分:0)

我不写asp.net(实际上从来没有一行;所以要带上一粒盐);但我怀疑这个结构:

new { id = "123" }

(和它下面的类似的一个)就是消息所指的“匿名类型”,我想知道为什么你的错误可能是错误的(第三次感觉最有可能的)。

首先,如果它类似C风格的结构,你可能需要使用'。'在“成员”标识符之前(对我而言,对于该错误消息有意义):

new { .id = "123}

第二,该错误的措辞让我想知道在这种环境中你是否不允许传入这样的匿名对象;并且您需要先将其分配给变量,然后传递变量。原谅任何语法错误:

@using htmlHelperstring.Models
@{
    ViewBag.Title = "Home Page";
    myID = new { id = 123 };
    myClass = new { @class = "foo",(bool)(@User.IsInRole("Chef"))}
}

<ul>
    @Html.MyActionLink(
    "<span>Hello World</span>", 
    "about", 
    "home",
    myID,
    myClass
)
</ul>

第三次new { @class = "foo",(bool)(@User.IsInRole("Chef"))}的语法对我来说很不可思议。也许(注意添加成员名称):new { @class = "foo", isChef = (bool)(@User.IsInRole("Chef"))}

答案 2 :(得分:0)

我刚刚做了一个愚蠢的错字(当天结束等)应该是:

@{ 
    ViewBag.Title = "Home Page"; 
    myID = new { id = 123 }; 
    myClass = new { @class = "foo"},(bool)(@User.IsInRole("Chef")) 
}