2012-08-29 98 views
0

我正在構建一個htmlhelper擴展,但出現此錯誤:無效的匿名類型成員聲明。匿名...?

無效的匿名類型成員聲明符。匿名類型成員必須聲明 與成員分配,簡單名稱或成員訪問。

我試圖@ User.IsInRole轉換爲一個布爾值,但無濟於事:(

這是剃刀標記:

@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()); 
     } 
    } 
} 

回答

1

看起來像您缺少以下成員:

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

你想分配布爾值到什麼?

你需要的東西是這樣的:

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

與要設置的屬性名稱替換HTMLATTRIBUTENAME。

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"))}

0

我剛剛作出了一個愚蠢的拼寫錯誤(這一天等結束)應該是:

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