在选择列表中设置默认值

时间:2011-05-21 17:29:26

标签: asp.net-mvc-2 selectlist

我有以下类和编辑器模板,用于为各种货币创建下拉列表。

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 个答案:

答案 0 :(得分:1)

您的编辑器模板是强类型的货币列表。此外,您将列表作为第一个参数传递给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() %>