例如,如果我有一个下拉列表
@Html.DropDownListFor(model => model.proj.price, Model.FoodSelectList, "Choose...")
列表显示一堆食物,每种食物都有一个价格值,当选择食物时会返回。我还想存储所选食品的名称。我怎样才能从选择列表中取回两个值?
感谢您帮助我使用类似于此javascript的内容
<script>
function myFunction()
{ var alertinfo = document.getElementById("Project_Price");
var Project_Names = alertinfo.options[alertinfo.selectedIndex].text;
$('#Project_Name).val(Project_Names);
}
</script>
答案 0 :(得分:2)
为名称创建隐藏字段:
@Html.HiddenFor(m => m.FoodName)
其中FoodName
是视图模型上用于存储食物名称的属性。然后在JavaScript中,利用jQuery,设置该值:
$('#{name_of_elem}').change(function() {
// set yourVal somehow here
var yourVal;
$('#FoodName').val(yourVal);
});
其中{name_of_elem}
是下拉元素的名称。我认为它将是proj_price
,但我不能确定,只看生成的HTML。
答案 1 :(得分:1)
听起来你真正需要的是一个包含这些值的Food
模型。过度简化它可能如下所示:
public class Food
{
public int ID { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
然后在您的视图模型中,您将选择相应Food
项的ID,而不是价格或名称。因此select
不包含实际数据,只包含对数据的引用。它的值将是ID,其文本将是名称(或价格,或其组合,无论您想要显示什么)。也许是这样的事情:
@Html.DropDownListFor(model => model.proj.FoodID, Model.FoodSelectList, "Choose...")
在服务器端代码中,给定所选实体的ID,您将从底层数据存储中获取实体本身,然后您将获得有关该实体的所有信息。为方便起见,它甚至可以从视图模型中加载延迟。类似的东西:
public int FoodID { get; set; }
public Food Food
{
get
{
return Food.Fetch(FoodID);
}
}
有很多方法可以实现这一点,有些方法可能比其他方式更适合您的模型结构,所以这只是一个例子来说明这个想法。但重点是select
将引用实体而不是试图包含实体,因为select
(和一般的HTTP POST值)实际上只是一个键/值对。 / p>