Невозможно предоставить вход для выбранного атрибута раскрывающегося списка в MVC - PullRequest
0 голосов
/ 07 марта 2019
public partial class Department
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Department()
        {
            this.Employees = new HashSet<Employee>();
        }

        public int ID { get; set; }
        public string Name { get; set; }
        public Nullable<bool> IsSelected { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Employee> Employees { get; set; }
    } 

    public ActionResult Create()
            {
                List<SelectListItem> DeptList = new List<SelectListItem>();
                foreach (Department tempdept in db.Departments)
                {
                    SelectListItem sli = new SelectListItem
                    {
                        Text = tempdept.Name,
                        Value = tempdept.ID.ToString(),
                        Selected = tempdept.IsSelected.HasValue ? tempdept.IsSelected.Value : false
                    };
                    DeptList.Add(sli);
                }
                ViewBag.Departments = DeptList;
                return View();
            }


            <div class="form-group">
                @Html.LabelFor(model => model.DepartmentID, "DepartmentID", htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.DropDownListFor(model => model.DepartmentID,(IEnumerable<SelectListItem>)ViewBag.Departments,new { @class = "form-control" ,
                   @selected = ViewBag.Departments.Selected.HasValue && ViewBag.Departments.Selected.Value ? "selected" : null
               })
                    @Html.ValidationMessageFor(model => model.DepartmentID, "", new { @class = "text-danger" })
                </div>
            </div>

Выше я упомянул код модели, контроллер и вид.По сути, я пытался установить элемент DropDownList по умолчанию, беря пользовательский ввод из базы данных, используя поле IsSelected в таблице Department.Таким образом, если в столбце IsSelected в базе данных соответствующего отдела указано 1, а во всех остальных NULL или 0, то для отдела, имеющего 1, по умолчанию устанавливается selected.элемент в DropDownList при наличии Get.

Но как только я запускаю свой код, я сталкиваюсь с ошибкой

('' System.Collections.Generic.Список 'не содержит определения для' Выбранный '')

Невозможно выяснить такое поведение.

Заранее спасибо !!!

1 Ответ

1 голос
/ 07 марта 2019

Удалите атрибут ur @selected = html в @ Html.DropDownListFor, раскрывающийся список достаточно умен, чтобы установить выбранное из SelectListItem

В моем случае я заполнил viewBag строками, поэтому я создаю коллекцию SelectListItem в @Razer, но ее также можно заполнить из контроллера

это работает для меня:

в файле xxx.cshtml

@{
    var weights = new List<SelectListItem>();
    foreach (var item in ViewBag.PossibleWeights)
    {
        weights.Add(
        new SelectListItem
        {
            Text = item,
            Value = item,
            Selected = item == Model.WeightCode
        });

    }
}
@Html.DropDownListFor(model => model.WeightCode, weights, new { @class = "form-control")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...