【问题标题】:Render mvc partial view by jquery select change event通过jquery选择更改事件渲染mvc部分视图
【发布时间】:2019-01-14 01:46:42
【问题描述】:

我试图将部分视图从我的控制器加载到一个 div 中,该控制器具有参数。 我已经用一个参数在按钮单击上做了类似的代码并且它起作用了。但它不适用于 select .change。 我在控制器中有两个选择和两个参数。我想弄清楚什么是错的?

public ActionResult MealandKcal(string searchString, double kcal)
        {
            Random rnd = new Random();

            var imgs = from a in _context.Images.Include("Restaurant").ToList()
                       orderby rnd.Next()
                       select a;


            var meals = from a in _context.Meals.Include("Image").ToList()
                        orderby rnd.Next()
                        select a;

            var meal = from a in meals
                       select a;

            if (kcal == 200)
            {
                meal = meal.Where(m => m.Name.Contains(searchString) && m.Calories < 200);
            }
            else if (kcal == 500)
            {
                meal = meal.Where(m => m.Name.Contains(searchString) && m.Calories >= 200 && m.Calories < 500);
            }
            else
            {
                meal = meal.Where(m => m.Name.Contains(searchString) && m.Calories >= 500);
            }

            RestaurantViewModel viewModel = new RestaurantViewModel()
            {
                Images = imgs,
                Meals = meal.ToList()
            };

            return PartialView(viewModel);

            }

这是两个选择:

<div class="container">
            <p style="font-weight:700; margin-top:20px;">
                Or, filter both at the same time <i class="em em-sunglasses"></i>
            </p>
            <div class="row" style="text-align:center;">
                <div class="col-md-6 col-6">
                    <select id="category" class="form-control">
                        <option value="">Select Category</option>
                        <option value="Salad"><i class="em em-green_salad"></i> Salad</option>
                        <option value="Soup"><i class="em em-bowl_with_spoon"></i> Soup</option>
                        <option value="Spaghetti"><i class="em em-spaghetti"></i> Spaghetti</option>
                        <option value="Steak"><i class="em em-cut_of_meat"></i> Steak</option>
                        <option value="Beef"><i class="em em-meat_on_bone"></i> Beef</option>
                        <option value="Pizza"><i class="em em-pizza"></i> Pizza</option>
                        <option value="Chicken"><i class="em em-chicken"></i> Chicken</option>
                        <option value="Fish"><i class="em em-tropical_fish"></i> Fish</option>
                        <option value="Salmon"><i class="em em-fish"></i> Salmon</option>
                        <option value="Cookie"><i class="em em-cookie"></i> Cookie</option>
                        <option value="Potato"><i class="em em-potato"></i> Potato</option>
                        <option value="Sandwich"><i class="em em-sandwich"></i> Sandwich</option>
                    </select>
                </div>
                <div class="col-md-6 col-6">
                    <select id="kcal" class="form-control">
                        <option value="">Select Calories range</option>
                        <option value="200">Less than 200 Kcal</option>
                        <option value="500">Less than 500 Kcal</option>
                        <option value="1000">More than 500 Kcal</option>
                    </select>
                </div>
            </div>
        </div>

这是我的 jquery:

var url = '@Url.Action("MealandKcal", "Home")';
                            $('#category').change(function () {
                                var category = $(this).val();
                                $("#kcal").change(function () {
                                    var kcal = $(this).val();
                                    $("#querydiv").load(url, { searchText: category, kcal: kcal });
                                });
                            });

【问题讨论】:

  • 您在第一次绑定更改事件时有错字。应该是 .change() 而不是 .chang
  • 不,我修好了,没有任何改变

标签: jquery html model-view-controller


【解决方案1】:

同时在两个选择上绑定onchange 事件。这允许您在单个回调中应用逻辑并在发出请求之前运行条件。

嵌套绑定并不能真正满足您的期望,因为它只会在更改类别选择然后更改 kcal 选择时执行。

这是您的代码修改后的 sn-p。

  • #category#kcal 选择绑定onchange
  • 当其中任何一个被触发时,检查两者是否都有值
  • 如果上述语句为真则获取结果

var url = '@Url.Action("MealandKcal", "Home")';

// Bind onchange to both selects
$('#category, #kcal').on('change', function () {
  // Return category select value
  var categoryValue = $('select#category').val()
  // Return category select value
  var caloricValue = $('select#kcal').val()
  // If both selects have been changed, fetch results...
  if (categoryValue && caloricValue) {
    // debug
    console.log('fetch results');
    // Result query
    $("#querydiv").load(url, {
      searchText: categoryValue,
      kcal: caloricValue
    });
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet"/>

<div class="container">
    <p style="font-weight:700; margin-top:20px;">
        Or, filter both at the same time <i class="em em-sunglasses"></i>
    </p>
    <div class="row" style="text-align:center;">
        <div class="col-md-6 col-6">
            <select id="category" class="form-control">
                <option value="">Select Category</option>
                <option value="Salad"><i class="em em-green_salad"></i> Salad</option>
                <option value="Soup"><i class="em em-bowl_with_spoon"></i> Soup</option>
                <option value="Spaghetti"><i class="em em-spaghetti"></i> Spaghetti</option>
                <option value="Steak"><i class="em em-cut_of_meat"></i> Steak</option>
                <option value="Beef"><i class="em em-meat_on_bone"></i> Beef</option>
                <option value="Pizza"><i class="em em-pizza"></i> Pizza</option>
                <option value="Chicken"><i class="em em-chicken"></i> Chicken</option>
                <option value="Fish"><i class="em em-tropical_fish"></i> Fish</option>
                <option value="Salmon"><i class="em em-fish"></i> Salmon</option>
                <option value="Cookie"><i class="em em-cookie"></i> Cookie</option>
                <option value="Potato"><i class="em em-potato"></i> Potato</option>
                <option value="Sandwich"><i class="em em-sandwich"></i> Sandwich</option>
            </select>
        </div>
        <div class="col-md-6 col-6">
            <select id="kcal" class="form-control">
                <option value="">Select Calories range</option>
                <option value="200">Less than 200 Kcal</option>
                <option value="500">Less than 500 Kcal</option>
                <option value="1000">More than 500 Kcal</option>
            </select>
        </div>
    </div>
</div>

【讨论】:

  • 它返回了这个错误:jquery-3.3.1.js:9600 POST localhost:65323/Home/MealandKcal500 (Internal Server Error)
  • 内部服务器错误是服务器端问题。检查您的请求参数并从那里开始......
  • 是的,问题确实出在我的参数中!非常感谢你真的帮助了:D :D
猜你喜欢
  • 2016-01-28
  • 2015-08-09
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 2015-07-13
相关资源
最近更新 更多