Предварительно загрузить и отключить EditorFor

Я делаю некоторую практику с 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 какими-либо значениями.

Спасибо!


person Newman14922013    schedule 16.05.2013    source источник


Ответы (1)


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

Если вы хотите отключить это поле ввода в своем представлении, сделайте следующее:

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

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

person Floremin    schedule 16.05.2013
comment
Спасибо за ваш ответ. Я пошел дальше и передал имя пользователя модели комментария в контроллере, как вы предложили, и это отлично работает. Я хотел бы отметить одну вещь: ваша строка кода для представления заставляет проверку рассматривать поле как пустое, несмотря на заблокированный текст. Но использование: new {@readonly = readonly} делает свое дело, хотя я предпочитаю ваш код отключения иконки курсора. - person Newman14922013; 17.05.2013