установить значение по умолчанию в списке выбора - PullRequest
0 голосов
/ 21 мая 2011

У меня есть следующий класс и шаблон редактора для создания выпадающего списка для различных валют.

public class Currency
{
    public string CurrencyId { get; set; }
    public string CurrencyName { get; set; }
}

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<morkyc.Core.Model.Currency>>" %>

<tr>
    <td style="width:50%;">
    <label class="fieldLabel">
    Specify Currency :
    </label>
    </td>
    <td>
        <%= Html.DropDownListFor(model => model, new SelectList(Model, "CurrencyId", "CurrencyName", ))%>
     </td>
</tr>

Я создаю список в моем контроллере

 List<Currency> lCurrencyList = new List<Currency>(new Currency[]
        {
            new Currency{CurrencyId = "AED", CurrencyName = "United Arab Emirates Dirham (AED)"}, 
            new Currency{CurrencyId = "AFN", CurrencyName = "Afghan Afghani (AFN)"}, 
            new Currency{CurrencyId = "ALL", CurrencyName = "Albanian Lek (ALL)"}, 
            new Currency{CurrencyId = "AMD", CurrencyName = "Armenian Dram (AMD)"}, 
            new Currency{CurrencyId = "ANG", CurrencyName = "Netherlands Antillean Guilder (ANG)"},
            new Currency{CurrencyId = "AOA", CurrencyName = "Angolan Kwanza (AOA)"},
            new Currency{CurrencyId = "ARS", CurrencyName = "Argentine Peso (ARS)"}, 
            new Currency{CurrencyId = "AUD", CurrencyName = "Australian Dollar (AUD)"}, 
            new Currency{CurrencyId = "AWG", CurrencyName = "Aruban Florin (AWG)"}, 
            new Currency{CurrencyId = "AZN", CurrencyName = "Azerbaijani Manat (AZN)"}, 
            new Currency{CurrencyId = "BAM", CurrencyName = "Bosnia-Herzegovina Convertible Mark (BAM)"}, 
            new Currency{CurrencyId = "BBD", CurrencyName = "Barbados Dollar (BBD)"}, 
            new Currency{CurrencyId = "BDT", CurrencyName = "Bangladeshi Taka (BDT)"}, 
            new Currency{CurrencyId = "BGN", CurrencyName = "Bulgarian Lev (BGN)"},
new Currency{CurrencyId = "ZWD", CurrencyName = "Zimbabwe Dollar (ZWD)"}
        });

На мой взгляд, я вызываю следующий вид для создания выпадающего списка

<%= Html.EditorFor(model => model.Currency)%>

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

Может ли кто-нибудь предложить, как установить выбранный по умолчанию элемент?

1 Ответ

1 голос
/ 22 мая 2011

Ваш шаблон редактора строго напечатан в списке валют. Также вы передаете список в качестве первого аргумента помощнику DropDownListFor, что не очень хорошо. Вы никогда не передаете какое-то выбранное значение, поэтому лучшее, что вы можете сделать в этом шаблоне редактора, это установить значение для первого элемента этого списка, например.

<%= Html.DropDownListFor(
    model => model, 
    new SelectList(Model, "CurrencyId", "CurrencyName", "AED")
)%>

Но я предполагаю, что вы хотите динамически передать это значение. Поэтому я бы немного изменил вашу модель представления:

public class CurrencyViewModel
{
    public string SelectedCurrency { get; set; }
    public IEnumerable<SelectListItem> Currencies { get; set; }
}

тогда есть следующий шаблон редактора:

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<CurrencyViewModel>" %>

<tr>
    <td style="width:50%;">
        <label class="fieldLabel">
            Specify Currency :
        </label>
    </td>
    <td>
        <%= Html.DropDownListFor(
            model => model.SelectedCurrency, 
            new SelectList(Model.Currencies, "Value", "Text")
        )%>
     </td>
</tr>

и теперь в вашем контроллере:

public ActionResult Foo()
{
    var model = new CurrencyViewModel
    {
        // Define the selected value here
        SelectedCurrency = "AED",
        Currencies = new[]
        {
            new SelectListItem { Value = "AED", Text = "United Arab Emirates Dirham (AED)" }, 
            new SelectListItem{ Value = "AFN", Text = "Afghan Afghani (AFN)"}, 
            ...
        }
    };
    return View(model);
}

и, наконец, в представлении вызвать пользовательский шаблон редактора:

<%= Html.EditorForModel() %>
...