Как хранить и отображать данные SelectList - PullRequest
0 голосов
/ 01 июля 2019

Я использую SelectList для заполнения выпадающих списков в моем представлении. Он работает для представлений «Создать» и «Редактировать» для хранения данных значений идентификаторов в таблице. Как получить значение «Имя» для отображения в подробном представлении?

Модель

Public Class Employee {
 [Key]
 public int ID { get; set;}
 public string UserName {get; set; }
 public byte Gender { get; set; }
}

ViewModel

public class EmployeeEditViewModel {
 public int ID { get; set; }
 public string UserName { get; set; }
 public SelectList GenderList { get; set; }

 public EmployeeEditViewModel () {
        GenderList = CommonHelper.GenderList(null);
    }
}

Helper

 public static SelectList GenderList(object selected)
    {
        return new SelectList(new[]
        {
            new { Value = 0, Name = "Male" },
            new { Value = 1, Name = "Female" }
            }
            , "Value", "Name", selected);
    }

Изменить вид

@model Models.ViewModel.EmployeeEditViewModel
@using (Html.BeginForm()) {
@Html.HiddenFor(model => model.ID)
<div class="form-group">
    @Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" })
    </div>
</div>
<div class="form-group">
    @Html.LabelFor(model => model.GenderList, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.Gender, Model.GenderList, "- Select -", new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.GenderList, "", new { @class = "text-danger" })
    </div>
</div>
}

Контроллер

[HttpPost]
    public ActionResult CreateEmployee(EmployeeEditViewModel emProfile)
    {
        try
        {
            if (ModelState.IsValid)
            {
                Employee newUser = new Employee();
                newUser.UserName = emProfile.UserName;
                newUser.Gender = emProfile.Gender;

                userRepository.Add(newUser);
                userRepository.SaveChanges();
                return RedirectToAction("Index");
            }
        }
        catch (Exception ex)
        { }            
        return View(emProfile);
    }

Пока все работает отлично, я могу создавать, редактировать записи сотрудников, и 1 или 0 сохраняются в таблице для пола. Но когда я хочу отобразить данные о сотруднике в подробном представлении, как я могу получить текст «Мужской» или «Женский»?

1 Ответ

0 голосов
/ 21 июля 2019

В итоге я создал вспомогательный метод для извлечения текста.

public static string GetTextFromSelectList(int id, string listName)
    {
        string selectedText = string.Empty;
        SelectListItem selectedItem;

        switch (listName)
        {
            case "Gender":
                selectedItem = Helper.CommonHelper.GenderList(null).FirstOrDefault(x => x.Value == id.ToString());
                selectedText = selectedItem == null ? null : selectedItem.Text;
                break;                
            default:
                selectedText = null;
                break;
        }
        return selectedText;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...