2014-12-08 5 views
0

Я пытаюсь установить значение для Razor DropDownListFor для управления. Я пробовал практически каждый метод, который я могу придумать, чтобы установить выбранное значение (не используя js после визуализации элемента управления, что на самом деле является последним средством), но когда элемент управления отображает его, он пока не отображает выбранное значение. Я могу предположить, что я пропускаю что-то действительно очевидное. Вот код:Значение настройки для DropDownListFor

@{ 
List<string> arrTitles = new List<string>("Mr,Mrs,Miss,Ms,Dr,Lady,Lord,Prof,Rev,Sir".Split(',')); 
List<SelectListItem> lstTitle = new List<SelectListItem>(); 

foreach (string title in arrTitles) 
{ 
    SelectListItem sli = new SelectListItem { Text = title, Value = title }; 
    if (Model != null) 
    { 
     if (title == Model.title) 
     { 
      sli.Selected = true; 
     } 
    } 
    lstTitle.Add(sli); 
} 
string formHandler = ViewBag.FormHandler; 
} 
@using (Html.BeginForm(formHandler, "Home", FormMethod.Post)) 
{ 

@Html.LabelFor(r => r.title) 
@Html.DropDownListFor(r => r.title, new SelectList(lstTitle, "Value", "Text", "Selected")); 

} 

Любые мысли?

+2

такого рода C# должен быть помещен в ваш метод действия, а не ваш HTML (как в настоящее время это не в формате MVC) – jbutler483

+0

Если значение свойства 'title' соответствует значение одного из параметров, то это то, что будет выбрано. Вы можете удалить свои попытки установить свойство «Selected». –

+0

И все, что вам нужно, это '@ Html.DropDownListFor (r => r.title, новый SelectList (arrTitles)'. Весь код, связанный с 'lstTitle', не нужен. –

ответ

0

Короткий ответ


Попробуйте использовать

@Html.DropDownList("1stTitle") 

, в которой Название является

ViewBag.Title = new selectlist(1stTitle); 

Для получения дополнительной информации см this article, примерно на полпути вниз страницы.


Более подробно


В контроллере, добавить что-то вроде:

var Title= new List<string>(); 

    var listOfTitles= //place list of titles here 

    Title.AddRange(listOfTitles.Distinct()); 
    ViewBag.personsTitle = new SelectList(Title); 

Тогда, на ваш взгляд:

@using (Html.BeginForm() 
    { 
    <p> 
     title: @Html.DropDownList("personsTitle ", "All") 

     <input type="submit" value="Filter" /> 
    </p> 
    } 

Это следует MVC намного лучше, так как он держит ваш код контроллера вдали от вашего представления (что должно действительно использоваться только для «просмотра» результатов вашего кода).

Ваш фактический код «выбора» всегда должен храниться в вашем контроллере, так как это намного лучше/быстрее, чтобы выполнять любые вычисления на сервере, а не на клиенте.

0

Попробуйте, как следующее:

@{ 
List<string> arrTitles = new List<string>("Mr,Mrs,Miss,Ms,Dr,Lady,Lord,Prof,Rev,Sir".Split(',')); 
List<SelectListItem> lstTitle = new List<SelectListItem>(); 
string selected = null; 

foreach (string title in arrTitles) 
{ 
SelectListItem sli = new SelectListItem { Text = title, Value = title }; 
if (Model != null) 
{ 
    if (title == Model.title) 
    { 
     selected = title; 
    } 
} 
lstTitle.Add(sli); 
} 
string formHandler = ViewBag.FormHandler; 
} 
@using (Html.BeginForm(formHandler, "Home", FormMethod.Post)) 
{ 

@Html.LabelFor(r => r.title) 
@Html.DropDownListFor(r => r.title, new SelectList(lstTitle, "Value", "Text", selected)); 

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