2015-01-26 4 views
2

Я работаю на ASP.NET MVC веб-приложений, внутри метода действия я определить следующий список выбора: -Отключить & Указать выбор по умолчанию для Html.DropDownList

ViewBag.ApproverID = new SelectList(db.staffs.ToList(), "ApproverID", "Name"); 

Тогда на представлении я пытаюсь отключить DropDownList следующим образом: -

@Html.DropDownList("ApproverID",String.Empty,new { @disabled = "disabled" }) 

но кажется DropDownList не позволяет это и повысит синтаксическую ошибку на представлении может кто-нибудь adivce? Thanks

ответ

5

Ваша неправильная перегрузка DropDownList. Он должен был бы быть

@Html.DropDownList("ApproverID", null, string.Empty, new { disabled= "disabled" }) 

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

Модель

public int ApproverID { get; set; } 

Контроллер

ViewBag.ApproverList = new SelectList(db.staffs.ToList(), "ApproverID", "Name"); 

Вид

@Html.DropDownListFor(m => m.ApproverID, (SelectList)ViewBag.ApproverList, "-Please select-", new { disabled = "disabled" }) 

Если вы установили в контроллере значение свойства ApproverID и оно соответствует одному из значений параметров, которые он будет выбран.

Но почему отключить выпадающий список? - Вы, очевидно, не можете выбрать что-либо, и оно не будет опубликовано, поэтому свойство модели будет null (и, вероятно, приведет к ошибке ModelState). Если вы просто хотите отобразить это значение, используйте @Html.DisplayFor() и @Html.HiddenFor(m => m.ApproverID), поэтому значение должно быть отправлено обратно

+0

Я не использую сильно тип DropDownListFor, поскольку раскрывающийся список, созданный шаблоном лесов, использует Html.DropDownList, а не строго типизированный, поэтому поскольку я основываю свой код на шаблоне леса, я пытаюсь быть совместимым с ним, и, конечно, использование строго типизированного будет более точным .. второй вопрос по этому "@ Html.DropDownList (" ApproverID ", null, string.Empty , new {disabled = "disabled"}) "метод перегрузки, что означает нуль? –

+1

Что вы использовали, была [эта перегрузка] (https://msdn.microsoft.com/en-us/library/dd470329 (v = vs.118) .aspx), где вторым параметром является 'IEnumerable ', но вы передавали ему строку (отсюда и ошибка). То, что вы имели в виду (я думаю), было [этой перегрузкой] (https://msdn.microsoft.com/en-us/library/dd492256 (v = vs.118) .aspx), где 3-й параметр является меткой опции. –

+0

также я использую раскрывающийся список вместо displayfor, потому что в поле появится имя пользователя (имя пользователя Approver), в то время как я буду хранить идентификатор пользователя, поэтому, если я использую Displayfor со скрытым полем, я буду размещать имя пользователя ,,, так что я должен запросить БД, чтобы получить идентификатор пользователя, основанный на имени пользователя, в то время как при использовании раскрывающегося списка будет предоставлена ​​возможность показать значение при отправке другого значения. –

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