@Model.ListProducts[selectedIndex].Price
在服务器上执行,并将结果添加到 HTML 中,然后再发送到客户端。这意味着selectedIndex
超出范围,因为在浏览器中之前您不会定义和使用它。
您不能将 Razor 标记与 JavaScript 混合使用。Razor 早在 JavaScript 掌握它之前就已经完成了它的工作。
您最可能想要的是使用您的模型生成下拉菜单,使用价格作为值字段,产品作为标签。你已经把其他所有东西都连接好了;只需将您的使用替换为@Model
JavaScript 即可获取所选选项的值。
编辑:我用于 JavaScript 人员/实体选择器的一种方法是将我需要的数据序列化为分隔字符串或 JSON 字符串化对象,并将其存储为元素(或父级)上的属性。这让我可以在页面上拥有多个控件实例,并使用单个 jQuery 选择器和代码块来“恢复”或从中读取data
以获取动态显示所需的任何信息。
例如:
<div data-serialized-products="@Model.PriceList.ToDataString()">
@Html.DropDownFor(m => ..., new { @class="showPrice"})
</div>
<script type="text/javascript">
$(function() {
$(".showPrice").change(function() {
var $dd = $(this);
//Grab the selected value, then do $dd.parent("div").data("serialized-products")
//to and either string split (for string delimited) or use JSON parse and access
//the property you need to put in the text box. Bonus - you can put your textbox
//target id in another data- attribute so you can repeat this set of controls.
});
});
</script>
您需要创建 ToDataString() 以返回串联字符串或 JSON 字符串化字符串。您的 JavaScript 函数需要匹配的 JSON 解析或分隔字符串拆分才能访问该值。只要您的对象不是很大(并且仅序列化您需要的属性),那么这应该是一种有用的方法。