Asp mvc отображает текстовое значение из поля id в SelectList - PullRequest
1 голос
/ 30 января 2011

как отобразить текстовое значение (CountryName) из выбранного идентификатора (CountryId) в списке выбора?Список SelectList содержится в модели представления, отправляемой в шаблон представления Details.В данный момент в поле отображается CountryID.Я хочу CountryName.

view

<div class="display-field">@Model.Dinner.CountryID</div>

controller

public ActionResult Details(int id)
    {
        Dinner dinner = dinnerRepository.GetDinner(id);
        DinnerFormViewModel model = new DinnerFormViewModel(dinner);
        if (dinner == null)   
            return View("NotFound");       
        else           
            return View("Details", model);
    }

viewmodel

public class DinnerFormViewModel
{
    public Dinner Dinner { get; private set; }
    public SelectList CountriesList { get; private set; }

    public DinnerFormViewModel(Dinner dinner)
    {
        Dinner = dinner;

        var items = new List<Country>() {
                new Country() { 
                    CountryID = 1,
                    CountryName = "England"
                },
                new Country() { 
                    CountryID = 2,
                    CountryName = "Ireland"
                },
                new Country() { 
                    CountryID = 3,
                    CountryName = "Scotland"
                },
                new Country() { 
                    CountryID = 3,
                    CountryName = "Wales"
                }
            };

        CountriesList = new SelectList(items, "CountryID", "CountryName", 2);
    }
}

Опять же это просто для отображения значения CountryNameэтикетка.Не хочу редактировать это или что-нибудь.LINQ выражение?

Ответы [ 2 ]

2 голосов
/ 31 января 2011

Это прекрасно работает

<div class="display-label">Country</div>
<div class="display-field">@Html.Encode(Model.CountriesList.SingleOrDefault(c => int.Parse(c.Value) == Model.Dinner.CountryID).Text)</div>

Благодаря связанной записи.

1 голос
/ 31 июля 2013

Я бы создал новый класс, чтобы помочь с поиском. В моем примере кода класс «BusinessResources». В этом классе я бы создал метод для каждого поиска, подобный показанному ниже для страны. Словарь идеально подходит для того, что вы пытаетесь достичь.

public static Dictionary<string, string> GetCountryList()
        {
            Dictionary<string, string> country = new Dictionary<string, string>();

            Capture2Entities db = new Capture2Entities();
            country = db.CountryLists.Where(x => x.IsDisabled == false)
                                 .OrderBy(x => x.CountryName)
                                 .Select(x => new { x.ID_Country, x.CountryName })
                                 .ToDictionary(key => key.ID_Country.ToString(), val => val.CountryName);
            return country;
        }

Вид будет выглядеть так

<div class="display-label">@Html.LabelFor(model => model.ID_Country)</div>
<div class="display-field">@Html.DropDownListFor(model => model.ID_Country, new SelectList(BusinessResources.GetCountryList(),"Key","Value"))</div>
...