2

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

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

2 回答 2

3

为名称创建一个隐藏字段:

@Html.HiddenFor(m => m.FoodName)

whereFoodName是视图模型上用于存储食物名称的属性。然后在 JavaScript 中,在这里利用 jQuery,设置该值:

$('#{name_of_elem}').change(function() {
    // set yourVal somehow here
    var yourVal;

    $('#FoodName').val(yourVal);
});

其中{name_of_elem}是下拉元素的名称。我认为它会是proj_price,但我不能确定,看看生成的 HTML。

于 2013-11-11T15:38:43.013 回答
2

听起来您真正需要的是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它将引用实体而不是试图包含实体,因为 a select(和一般的 HTTP POST 值)实际上只是一个键/值对。

于 2013-11-11T15:43:47.367 回答