2011-05-21 92 views
0

我有用于创建各种货币下拉列表的类和编辑器模板。在选择列表中设置默认值

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

您的编辑器模板被强制键入货币列表。另外,您还将一个列表作为第一个参数传递给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() %>