MVC 3 редактировать вид только для определенных полей - PullRequest
8 голосов
/ 30 декабря 2011

У меня есть эта модель:

public class ExchangeRate
{
    [Key]
    public  int ExchangeRateID { get; set; }
    [Required]
    [Display(Name = "Currency:")]
    public  string Currency { get; set; }
    [Required]
    public  decimal Rate { get; set; }
}

Представление «Создать» работает нормально, но когда я нахожусь в представлении редактирования, я хочу, чтобы отображалось только свойство Currency, а не редактировалось. Как мне это сделать? Если бы я создал другую модель «только для просмотра» для этого класса, я бы пропустил свойство «Валюта» и не смог бы его отобразить.

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>ExchangeRate</legend>

    @Html.HiddenFor(model => model.ExchangeRateID)

    <div class="editor-label">
        @Html.LabelFor(model => model.Currency)
    </div>
    <div class="editor-field">
         @Html.DisplayFor(model => model.Currency)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Rate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Rate)
        @Html.ValidationMessageFor(model => model.Rate)
    </div>

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>

}

Изменение @ Html.EditorFor (model => model.Currency) на @ Html.DisplayFor (model => model.Currency) не работает, поскольку состояние модели становится недействительным, когда оно отправляется обратно в контроллер.

Ответы [ 3 ]

10 голосов
/ 30 декабря 2011

Вы можете добавить

@Html.HiddenFor(model => model.Currency)

в вашей форме и затем используйте

@Html.DisplayFor(model=> model.Currency)

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

4 голосов
/ 30 декабря 2011

Вы ищете:

[HiddenInput(DisplayValue=true)]

Затем отобразите редактор, а не дисплей (используйте EditorFor).

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

3 голосов
/ 30 декабря 2011

Чтобы отобразить валюту, но не редактировать ее, попробуйте

@Html.Label("Currency", Model.Currency)

если вам также необходимо отправить значение валюты обратно в контроллер, попробуйте

@Html.HiddenFor(m => m.Currency)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...