2017-02-17 22 views
0

Я пытаюсь просто отобразить имя пользователя так же, как в _LoginPartial.cshtml в определенном поле на моей странице Create.cshtml.User.Identity.GetUserName() не будет отображать ничего

У меня есть это на вершине:

@using Microsoft.AspNet.Identity 

И в cshtml у меня есть:

<div class="form-group"> 
      @Html.LabelFor(model => model.CreatedBy, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="form-control-static"> 
       @Html.Display(User.Identity.GetUserName()) 
       @Html.Hidden(User.Identity.GetUserName()) 
       @Html.ValidationMessageFor(model => model.CreatedBy, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

Но когда отображается страница, несмотря на имя пользователя появляются в верхней во встроенном частичный, он не будет отображаться там, где он должен быть в форме. Ничего не видно. Нет ошибок.

+0

Пожалуйста, обратите внимание тегов - и когда говорят, НЕ ИСПОЛЬЗОВАТЬ, пожалуйста, не используйте. –

ответ

0

Так получается, что единственный способ, которым я мог управлять, чтобы пройти по электронной почте текущего пользователя к созданию страницы, чтобы создать новый экземпляр модели и установить свойство «CreatedBy» в методе GET контроллера, затем передать эту модель в представление и использовать DisplayFor.

public ActionResult Create() 
    { 
     NewUser nu = new NewUser(); 
     nu.CreatedBy = User.Identity.Name; 
     ViewBag.DepartmentId = new SelectList(db.departments, "DepartmentId", "DepartmentName"); 
     ViewBag.LocationId = new SelectList(db.locations, "LocationId", "LocationName"); 
     return View(nu); 
    } 

И

<div class="form-group"> 
     @Html.LabelFor(model => model.CreatedBy, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="form-control-static"> 
      &nbsp;&nbsp; 
      @Html.DisplayFor(m => m.CreatedBy, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.HiddenFor(m => m.CreatedBy) 
      @Html.ValidationMessageFor(model => model.CreatedBy, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
3

Проверить Возможные проблемы аутентификации

Метод GetUserName() будет возвращать только имя текущего пользователя, прошедшего аутентификацию, так что если вы не вошли ни в одну из существующих учетных записей, оно будет пустым.

Это может варьироваться в зависимости от режима проверки подлинности вашего приложения (т.е. проверки подлинности на основе форм, Windows и т.д.), которые обычно можно увидеть в <authentication> части вашего файла web.config:

<!-- Forms-based authentication (i.e. default username/password scenario) --> 
<authentication mode="Forms"/> 
<!-- Windows-based authentication (i.e. use current account) --> 
<authentication mode="Windows"/> 

В сценарии «Файл»> «Новый проект» проверка подлинности форм, вероятно, будет включена (если только она не была явно отключена), поэтому вы должны просто создать новую учетную запись, а затем войти в учетную запись, чтобы увидеть правильное отображение имени пользователя внутри вид.

Рассмотрит использование альтернативного

Если вы уверены, что аутентификация не основной вопрос, рассмотреть избегая методы HTML Helper полностью и просто выводить значения в скрытое поле с использованием либо существующий GetUserName() метода или User.Identity.Name свойство, которое должно возвращать то же значение, если у вас есть не возился с Претензии:

<div class="form-control-static"> 
    <!-- Either of these approaches should work if you are authenticated --> 
    <input type='hidden' value='@User.Identity.GetUserName()' /> 
    <input type='hidden' value='@User.Identity.Name' /> 
    @Html.ValidationMessageFor(model => model.CreatedBy, "", new { @class = "text-danger" }) 
</div> 

Если все остальное терпит неудачу ...

Если ни одно из предлагаемых решений, похоже, не работает, возможно, что что-то не так правильно настроено в вашем проекте (а именно, встроенная логика Identity).

Возможно, это может произойти, если вы создали пустой проект, а затем просто вставили какой-либо код из шаблона по умолчанию, в котором идентификатор не будет настроен должным образом.

+0

Я зарегистрирован, следовательно, тот факт, что он правильно отображает имя пользователя в loginPartial. Если бы я не был зарегистрирован, это не показало бы этого. Я также попробовал User.Identity.Name, нет такой удачи. –

+0

IIRC, представление LoginPartial обычно использует 'User.Identity.Name', поэтому должно работать каким-то образом, форма или форма, чтобы _should_ работал. Возможно, вы захотите проверить свой точный вид LoginPartial, чтобы подтвердить это. Кроме того, попытались ли вы установить точку останова в vew (или связанное с ним действие контроллера), чтобы узнать, какое значение имеет значение User.Identity и его свойства. –

+0

На самом деле он использует метод GetUserName(), так как мне стало известно о методе для начала. Изменение HTML ничего не делает. Я не уверен, почему он не может заставить текущего пользователя войти в систему. Это вход в систему с использованием Google OAuth. –

0

Try @Html.DisplayFor() вместо:

@Html.DisplayFor(x=>User.Identity.Name) 

или, может быть,

@Html.DisplayFor(x=>User.Identity.GetUserName()) 
+0

Это не то, что работает, я не думаю. Я попробовал просто посмотреть, но это не сработает. –

+0

Достаточно честный. Я не верю, что поведение было согласовано с одной версией ASP.NET MVC для следующего, и это работает в приложении MVC 4, которое я недавно редактировал. – maniak1982

 Смежные вопросы

  • Нет связанных вопросов^_^