Почему настройки ViewBag недоступны для просмотра? - PullRequest
1 голос
/ 01 августа 2011

У меня есть следующий код в действии Index моего HomeController и код под ним в моем макете.Когда я вызываю представление Home / Index, свойство UserName не устанавливается, но я знаю, что оно установлено в моем контроллере, поскольку я проверяю значение с точкой останова.

Контроллер:

public ActionResult Index()
{
    ViewData.Add("UserName", User.Identity.Name);
    return View();
}

Вид:

@{ 
    if (User.Identity.IsAuthenticated)
    {
    <text>Hello </text>
    @ViewBag.UserName <text> - </text>
    @Html.ActionLink("Sign Out", "LogOff", "Account", null, new { style = "font-weight: bold;" })
    }
}

РЕДАКТИРОВАТЬ: Когда я пытаюсь использовать следующий код представления, как предлагается в ответах ниже, яполучить ошибку компиляции: 'System.Web.Mvc.HtmlHelper' не имеет применимого метода с именем 'Display', но, похоже, имеет метод расширения с таким именем.

Интересно, если этоне является ли побочный эффект моих вложенных макетов?Макет для указанного представления - _ThreeColumn, а макет для последнего - _Layout, установленный по умолчанию в _ViewStart.

Ответы [ 2 ]

4 голосов
/ 01 августа 2011

Во-первых, вы должны постоянно использовать viewbag или viewdata и в вашем контроллере, и в представлении, поскольку это облегчает понимание вашего кода.

public ActionResult Index()
{
    ViewBag.Username = User.Identity.Name;
    return View();
}

Настоящая проблема заключается в @Html.Display, вам больше не нужен символ @. Должно быть так:

@ViewBag.UserName <text> - </text>
3 голосов
/ 01 августа 2011

изменить @Html.Display("@ViewBag.UserName") на @ViewBag.UserName

также вы можете сделать ниже для большей читабельности (внутри контроллера)

ViewBag.UserName=  User.Identity.Name;

@ variableName в видах бритвы автоматически производит кодированный HTMLтекст.См. Ниже

---A razor view start---

    @{
       string name= "<b>Praveen</b>";       
    }

    Hello @name     
    <br><br>
   Hello  @Html.Raw(name)
---A razor view end---

- вывод ----

Привет <b>Praveen!!</b> --- автоматически в кодировке html

Привет Правин --html производится как есть

...