Установить выбранный элемент в раскрывающемся списке HTML, используя значение из ViewModel - PullRequest
0 голосов
/ 03 января 2012

У меня есть раскрывающийся список HTML:

<select name="status">  
       <option value="close" >Close Task</option>
       <option value="open" >Reopen Task</option>
  </select>

Я хочу установить параметр selected, основываясь на свойстве Task.Completion в моей модели представления:

public class TaskEditViewModel
{
    public Task Task { get; set; }
    public TaskComment TaskComment { get; set; }
}

Таким образом, если Task.Completion имеет значение NULL, выбирается параметр «Закрыть», в противном случае выбирается параметр «Открыть».

Как я могу это сделать?

1 Ответ

0 голосов
/ 03 января 2012

Ваша модель представления не приспособлена к тому, что вы пытаетесь сделать в представлении (которое в соответствии с вашим вопросом показывает раскрывающийся список и предварительно выбирает значение, основанное на каком-либо свойстве модели представления)

Итак, гораздо более реалистичная модель вида будет такой:

public class TaskEditViewModel
{
    public string Completion { get; set; }
    public IEnumerable<SelectListItem> Actions 
    { 
        get
        {
            return new[]
            {
                new SelectListItem { Value = "close", Text = "Close Task" },
                new SelectListItem { Value = "open", Text = "Reopen Task" },
            };
        }
    }
}

тогда у вас может быть действие контроллера, которое заполнит и передаст эту модель представления в представление:

public ActionResult Foo()
{
    var model = new TaskEditViewModel();

    // this will automatically preselect the second item in the list
    model.Completion = "open";

    return View(model);
}

и, наконец, внутри вашего строго типизированного представления вы можете использовать помощник DropDownListFor для рендеринга этого выпадающего списка:

@model TaskEditViewModel
@Html.DropDownListFor(x => x.Completion, Model.Actions)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...