【发布时间】:2017-11-12 11:12:18
【问题描述】:
我正在尝试使用 javascript 和 asp.net 核心过滤价格,但我想出了一堆实际上不起作用的 javascript。 必须有一种更简单的方法,使用 jquery 还是使用 c#?
如果有人有任何建议,将不胜感激!
Price Filter
<p>Sort By Price: </p>
<select id="sort" onChange="OnSelectedIndexChange()">
<option value="all">All</option>
<option value="1">$0 - $50</option>
<option value="2">$51 - $100</option>
<option value="3">$101 - $150</option>
<option value="4">$151 + </option>
</select>
<div class="row">
@{
foreach (var item in Model.Products)
{
if (item.CategoryId == Model.CategoryId)
{
<div class="card h-100" id="hamper">
<p id="price">$@item.Price</p>
</div>
}
}
}
</div>
</div>
<!-- Javascript -->
<script type="text/javascript">
var prices = [];
@foreach(var item in Model.Products)
{
@:prices.push(@item.Price)
}
function OnSelectedIndexChange() {
if (document.getElementById('sort').value == "all") {
document.getElementById("hamper").style.display = "block";
} else if (document.getElementById('sort').value == "1") {
for (var i = 0; i < prices.length; i++) {
if (prices[i] >= 0 && prices[i] <= 50 ) {
document.getElementById("hamper").style.display = "block";
} else {
document.getElementById("hamper").style.display = "none";
}
}
} else if (document.getElementById('sort').value == "2") {
for (var i = 0; i < prices.length; i++) {
if (prices[i] >= 51 && prices[i] <= 100) {
document.getElementById("hamper").style.display = "block";
} else {
document.getElementById("hamper").style.display = "none";
}
}
} else if (document.getElementById('sort').value == "3") {
for (var i = 0; i < prices.length; i++) {
if (prices[i] >= 101 && prices[i] <= 150) {
document.getElementById("hamper").style.display = "block";
} else {
document.getElementById("hamper").style.display = "none";
}
}
} else if (document.getElementById('sort').value == "4") {
for (var i = 0; i < prices.length; i++) {
if (prices[i] >= 150) {
document.getElementById("hamper").style.display = "block";
} else {
document.getElementById("hamper").style.display = "none";
}
}
}
}
</script>
【问题讨论】:
-
您真正在寻找什么?获取
sort的最大值和最小值,例如仅通过$('#sort option:last').val()获取最后一个(最大)项。 -
首先,重复的
id属性无效(您的脚本只会选择带有id="hamper"的第一个元素)- 使用类名。 -
只需使用
var prices = @Html.Raw(Json.Encode(Model.Products.Select(x => x.Price))将模型转换为javascript数组)
标签: javascript c# jquery asp.net-mvc asp.net-core