3

アプリケーションに登録されているユーザーのフルネームと、サードパーティ認証を介してログインした場合のユーザー名を表示するための、ビュー内の私のヘルパー。

@using MyApp.Models;

@helper GetUserName()
{
    if (User.Identity.AuthenticationType == "Application")
    {
        using (var db = new MyAppDbContext())
        {
            @db.Users.Find(User.Identity.GetUserId()).FullName
        }
    }
    else
    {
        @User.Identity.GetUserName()
    }
}

次に、このヘルパーを使用します。

@if (Request.IsAuthenticated)
{
    using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-form pull-right" }))
    {
    @Html.AntiForgeryToken()

    <ul class="nav">
        <li>
            @Html.ActionLink("Hello " + GetUserName() + "!", "Manage", "Account", routeValues: null, htmlAttributes: new { title = "Manage" })
        </li>
        <li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
    </ul>
    }
}

私のユーザーの名前は Proba234 で、次のように表示されます。

ここに画像の説明を入力

奇妙な文字 ( ) が表示される理由と<$G+$>、それらを取り除く方法を教えてください。

4

2 に答える 2

0

面白いキャラクターはヘルパーによって生成されたようです。問題は、ヘルパーの出力が通常のように消費されることを意図していないことstringです。どうやらRazor用にあるはずのいくつかの制御文字を生成しますが、出力を通常の文字列として使用しようとすると(@Html.ActionLink()その引数が予想されるように)、それらが表示されます。

それらを取り除くにはGetUserName()、 @ 内でヘルパーを使用するのではなくHtml.ActionLink()、コントローラーで UserName を取得し、viewmodel のプロパティを介して渡します。とにかく、私の見解ではそのような論理を持つべきではありません。

于 2014-10-16T22:53:44.400 に答える