Вам нужно добавить значения к вашим элементам, а не только текст:
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; }