2013-05-16 3 views
2

Я занимаюсь практикой с MVC4. Мой практический проект - это простой вид форума/форума комментариев, который позволяет зарегистрированным пользователям и анонимным пользователям оставлять комментарии.Предварительная загрузка и отключение редактораДля

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

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

Вот мой код с точки зрения:

<div class="editor-label"> 
     @Html.LabelFor(x => x.comment.Name) 
    </div> 
    <div class="editor-field"> 
     @Html.ValidationMessageFor(x => x.comment.Name) 
     <br /> 
     @if (User.Identity.Name=="") { 
      @Html.EditorFor(x => x.comment.Name) 
     } else { 
      @Html.EditorFor(x => x.comment.Name, Model.PosterName) 
     } 
    </div> 

Обратите внимание, что Model.PosterName просто держит имя пользователя в виде строки. Это не пусто или пусто.

Как я могу отредактировать вторую строку EditorFor, чтобы использовать Model.PosterName как параметр по умолчанию? Должен ли я, возможно, использовать DisplayFor вместо неприменимого поведения?

Код, который я написал выше, не заполняет EditorFor любыми значениями.

Спасибо!

ответ

5

Модель, с которой вы переходите в представление для нового комментария, должна иметь comment.Name, установленную на все, что вам нужно. Вы можете сделать это в своем контроллере. Если вы можете опубликовать свой код контроллера, я смогу дать вам точный код, который вам нужно добавить.

Если вы хотите отключить это поле ввода с вашей точкой зрения, это сделать:

@Html.TextBoxFor(x => x.comment.Name, new { @disabled = "disabled" }) 

Вам не нужно использовать EditorFor, если вы знаете, что это текстовое поле. С помощью TextBoxFor вы можете указать атрибуты html, как указано выше.

+1

Спасибо за ваш ответ. Я сделал и подал имя пользователя в модель комментария в контроллере, как вы предлагали, и работает отлично. Одна вещь, которую я хотел бы указать, что ваша строка кода для представления заставляет валидацию рассматривать поле как пустое, несмотря на то, что текст заблокирован. Но использование: new {@readonly = "readonly"} делает трюк, хотя я предпочитайте отключение вашего курсора значка курсора. – Newman14922013