从Dropdownlist中获取选定的值

时间:2012-03-14 12:51:12

标签: asp.net asp.net-mvc asp.net-mvc-2

大家好,怎样才能获得选定的价值?

这是我的模特

public class PaymentModels
{
    public int CreditCardNumber { get; set; }
    public List<SelectListItem> CardType { get; set; }

    public static List<SelectListItem> getCardTypes()
    {
        List<SelectListItem> cardType = new List<SelectListItem>();
        cardType.Add(new SelectListItem { Text = "American Express"});
        cardType.Add(new SelectListItem { Text = "Mastercard" });
        cardType.Add(new SelectListItem { Text = "Visa" });

        return cardType;
    }
}

这是通过控制器在视图上显示列表的方式

ViewData["List"] = PaymentModels.getCardTypes();

这是我的回发方法

[HttpPost]
public ActionResult Payment(PaymentModels pay)
{
    String vr;
    foreach(var v in pay.CardType) {
        vr= v.Selected.ToString();
    }

    return View();
}

我的问题是,当调用post事件时,如何从我的cardtype列表中获取所选值?

1 个答案:

答案 0 :(得分:5)

您需要为商品添加值,而不仅仅是文字:

public static List<SelectListItem> getCardTypes()
{
    List<SelectListItem> cardType = new List<SelectListItem>();
    cardType.Add(new SelectListItem { Value = "1", Text = "American Express" });
    cardType.Add(new SelectListItem { Value = "2", Text = "Mastercard" });
    cardType.Add(new SelectListItem { Value = "3", Text = "Visa" });

    return cardType;
}

现在您可以在视图模型上添加一个属性:

public int SelectedCardType { get; set; }

在视图中:

<%= Html.DropDownListFor(
    x => x.SelectedCardType, 
    (IEnumerable<SelectListItem>)ViewData["list"]
) %>

并在您的控制器操作中:

[HttpPost]
public ActionResult Payment(PaymentModels pay)
{
    // pay.SelectedCardType will contain the selected value (1, 2 or 3)
    ...
}

当然,值不一定是整数。您也可以使用字符串属性:

public static List<SelectListItem> getCardTypes()
{
    List<SelectListItem> cardType = new List<SelectListItem>();
    cardType.Add(new SelectListItem { Value = "American Express", Text = "American Express" });
    cardType.Add(new SelectListItem { Value = "Mastercard", Text = "Mastercard" });
    cardType.Add(new SelectListItem { Value = "Visa", Text = "Visa" });

    return cardType;
}

public string SelectedCardType { get; set; }