根据DropDownList中的选定项显示ViewBag的属性

时间:2014-05-21 00:25:15

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

我想在视图的文本框中显示所选项目的价格。例如,从DLL中选择的产品的价格为10欧元,它应该显示在视图中。有人可以帮忙吗?

的Controler

    public ActionResult Edit(int id)
    {
        Product product = DB.Products.Find(id);
        ViewBag.Formats = new SelectList(storeDB.Format, "FormatID", "FormatName", "Price");
        ViewBag.Foo = "Some Value";     //test
        return View(product);
    }

查看

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>

        <div class="editor-field">
            @Html.DropDownList("Formats", ViewBag.Formats as SelectList, new { id = "DDLFormatsID" })
            @Html.Display("Price")        //displays nothing
            @Html.Display("Foo")          //working properly
        </div>

    </fieldset>
}

This can explain more.

更新

update

1 个答案:

答案 0 :(得分:1)

问题似乎是SelectList的构造函数中的参数顺序。我更改了这一行,它按预期工作,显示了价格。

ViewBag.Formats = new SelectList(storeDB.Format, "FormatID", "Price");

您可以检查构造函数中每个参数的用法。第一个是数据,第二个是保存要在帖子上发送的数据的属性名称,第三个是要显示的属性的名称。

回答更新的问题:

如果要根据下拉列表中的值显示某些值,则可以使用javascript进行操作。首先您需要识别控件以放置您的值,我将使用跨度但您可以使用文本框等。然后您订阅下拉列表的更改事件并每次更改第一个控件的内容。

请注意,我使用select的值来存储价格。如果您希望将值作为项目的ID接收,则无法使用此方法。您需要将价格存储在其他地方,您可以使用隐藏元素。

您必须在视图中引用jQuery库。

代码是这样的:

public ActionResult Edit(int id)
{
    Product product = DB.Products.Find(id);
    ViewBag.Formats = new SelectList(storeDB.Format, "Price", "FormatName");
    return View(product);
}

查看

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>

        <div class="editor-field">
            @Html.DropDownList("Formats", ViewBag.Formats as SelectList, new { id = "DDLFormatsID" })
            <span id="priceHolder"></span>
        </div>

    </fieldset>
}

<script src="~/Scripts/jquery-1.9.1.js"></script>

<script type="text/javascript">
    $(document).ready(function() {
        $("#Formats").change(function () {
            var $this = $(this);
            var selectedValue = $this.val();
            $('#priceHolder').html(selectedValue);
        });
    });
</script>