0

我有一个名为 Bill 的 ViewModel,它有一个名为 Product 的模型列表,使用 Bill ViewModel 的 Index 视图有一个包含产品名称的 DropDown 和一个我想设置产品价格的文本框(位于产品中列表)到文本框中,具体取决于下拉列表中选择的产品。

以下是产品型号:

    public class Product
    {
    public string ProductName { get; set; }
    public decimal Price { get; set; 
    }

这是账单模型:

    public class BillViewModel
    {
    public SelectList ProductList { get; set; }
    public int ProductSelected { get; set; }
    public List<Product> ListProducts { get; set; }

    }

这是索引视图:

这是我用来更改下拉值的脚本,我使用产品列表中下拉列表中选择的值来获取产品价格,但它始终获取第一个呈现的值,当我更改时文本框不会更新值选择。

<script type="text/javascript">

$('#select').change(function () {
    $('#priceTxt').val(@Model.ListProducts[@Model.ProductSelected].Price);
});

<fieldset>
    <legend>BillViewModel</legend>

    <div class="display-label">
        @Html.Label("Product")
        @Html.DropDownListFor(model => model.ProductSelected, Model.ProductList, "Select Product", new {id = "select"})
    </div>

</fieldset>
<div class="modal-footer">
    <a href="#" class="btn" data-dismiss="modal">Close</a>
    <a href="#" class="btn btn-primary" data-dismiss="modal" id="submit">Save changes</a>

如果我没有使用正确的架构方法,请告诉我。

4

1 回答 1

1

UI 更改时,您的模型不会更新。该模型仅提供“智能感知”类型功能,以确保属性和 UI 之间的强绑定。模型绑定器也可以使用它在提交表单时将这些表单字段映射回具体对象。但是,一旦将其渲染到客户端浏览器,就不再有实际的模型了。它仅在服务器端渲染和绑定期间有效。

您需要更新Change处理程序以从中获取所选值,$(this)而不是尝试使用“$(this)”是触发 change 事件的 jQuery 包装的 DOM 元素的模型 - 您的下拉菜单。只是看看如何抓住价值。我目前无法编写代码示例,但应该很容易找到如何访问更改下拉列表的选定值。

编辑:将模型属性视为常量值。它们在服务器上呈现时插入到标记中,并将结果发送到浏览器。在这种情况下,您的change处理程序基本上是向 .val() 调用发送硬编码值。一旦在浏览器上呈现,它就永远不会改变。

于 2013-07-26T17:32:22.163 回答