0

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

3 に答える 3

1

次のメンバーの割り当てが不足しているようです。

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

ブール値を何に割り当てたいですか?

次のようなものが必要です。

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

HTMLATTRIBUTENAMEを、設定する属性名に置き換えます。

于 2012-08-29T07:16:45.163 に答える
0

私はasp.netを作成しません(実際には1行ではありません。したがって、一粒の塩でそれを取ります)。しかし、私はその構成が疑うでしょう:

new { id = "123" }

(およびその下の同様のもの)は、メッセージが「匿名タイプ」によって参照しているものであり、私はあなたが持っているものが間違っている可能性がある理由についていくつか考えています(3番目の感覚が最も可能性が高いです)。

まず、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"))}

于 2012-08-29T07:19:12.073 に答える
0

私は愚かなタイプミスをしました(一日の終わりなど)。

@{ 
    ViewBag.Title = "Home Page"; 
    myID = new { id = 123 }; 
    myClass = new { @class = "foo"},(bool)(@User.IsInRole("Chef")) 
} 
于 2012-08-30T00:27:43.903 に答える