如何在ASP.NET MVC中使用选择列表返回多个值?

时间:2013-11-11 15:33:54

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

例如,如果我有一个下拉列表

 @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>

2 个答案:

答案 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>