下拉列表的模型的特定部分

时间:2012-10-19 08:39:24

标签: c# asp.net-mvc-3

这就是我想要完成的事情。

基本上我的Currency模型包含IDNameBuyValueMidValueSellValueDateCreated

现在我想在转换器I中使用它们。它有两个下拉列表,其中第一个ddl是转换哪种货币,第二个哪个货币是转换器。常规的东西。

第一个ddl应始终包含Name作为ddl中的文本和BuyValue作为值,而第二个ddl应始终包含Name作为文本,SellValue作为值。用简单的HTML术语来表达这样的东西。

<select id="ddlFirst">
    <option value="BuyValue1">Name1</option>
    <option value="BuyValue2">Name2</option>
    ...
</select>
<select id="ddlSecond">
    <option value="SellValue1">Name1</option>
    <option value="SellValue2">Name2</option>
    ...
</select>

当然这不是代码,它只是澄清了上面的解释。
我在这个问题上相当初学者,并且根本不知道从哪里开始。什么让我最大的是我应该以某种方式将这些值分成不同的模型并从中创建一个视图模型,或者我可以以某种方式使用它们。说实话,我很困惑,所以感谢任何帮助。

更新

var currencies = db.Currencies.Where(c => c.DateCreated.Equals(today));
var list = currencies.Select(s => new { s.ID, s.Name, s.BuyValue, s.SellValue }).ToList();

var model = new ConverterViewModel
{
    FromValues = list.Select( x => new SelectListItem { Value = x.BuyValue.ToString(), Text =  x.Name}),
    ToValues = list.Select(x => new SelectListItem { Value = x.SellValue.ToString(), Text = x.Name }),
};

虽然这是空的。 :(我知道它不是。

1 个答案:

答案 0 :(得分:5)

  

最让我感动的是我应该以某种方式将这些值分开   不同的模型,并创建一个视图模型或我可以   以某种方式使用它们。

是的,当然,你应该定义一个视图模型:

public class MyViewModel
{
    public string From { get; set; }
    public IEnumerable<SelectListItem> FromValues { get; set; }

    public string To { get; set; }
    public IEnumerable<SelectListItem> ToValues { get; set; }
}

然后让控制器操作填充此视图模型并将其传递给视图:

public ActionResult SomeAction()
{
    var currencies = _db.Currencies.ToList();
    var model = new MyViewModel
    {
        FromValues = currencies.Select(x => new SelectListItem { Value = x.BuyValue.ToString(), Text = x.Name }),
        ToValues = currencies.Select(x => new SelectListItem { Value = x.SellValue.ToString(), Text = x.Name })
    };
    return View(model);
}

最后有一个强类型视图:

@model MyViewModel

<div>
    @Html.LabelFor(x => x.From)
    @Html.DropDownListFor(x => x.From, Model.FromValues)
</div>
<div>
    @Html.LabelFor(x => x.To)
    @Html.DropDownListFor(x => x.To, Model.ToValues)
</div>