在asp mvc

时间:2015-11-05 14:37:40

标签: jquery ajax asp.net-mvc

我的表单下拉框中有一个类别列表。我想根据所选类别下拉列表选择不同的选择列表,而不是回发和所有这些。

我在我的控制器中创建了一个完成工作的方法:

[HttpPost]
public ActionResult GetItemByCategoryId(int category_id)
{
    var itemsobject = DB.items.Where(s => s.category_id == category_id).ToList();
    SelectList item_id = new SelectList(itemsobject, "item_id", "item_name");
    ViewBag.item_id = item_id;
    return Json(itemsobject, JsonRequestBehavior.AllowGet);
}

以下是我的观点:

<div class="form-group">
    <label class="control-label col-md-4">category name</label>
    <div class="col-md-4">
        @Html.DropDownListFor(a => a.category_id, (SelectList)ViewBag.category_id)
    </div>
</div>

<div class="form-group">
    <div class="col-md-4">
        <div class="col-md-4" id="mydiv">
        </div>
    </div>
</div>

并且,这是一个Javascript函数,它在下拉列表更改事件中触发,并对返回JSON结果的action方法执行ajax调用。

<script language="javascript" type="text/javascript">
    $(function () {
        $("#category_id").change(function() {
            c = $(this).val();
            alert(c);
            $.ajax({
                url: "@Url.Action("GetItemByCategoryId", "Category")",
                data: { "category_id": c },
                cache: false,
                DataType: 'json',
                type: "POST",
                success: function (data) {
                    $("#mydiv").text(data[0].Text);                  
                },
                error: function () {
                    alert("failed");
                }
            });//end ajax            
        });//end change event
    });//end document loading
</script>

但是,这不起作用。我的警报只是弹出一个失败。 你能告诉我如何实现这个目标吗?

3 个答案:

答案 0 :(得分:1)

问题在于行动

return Json(itemsobject, JsonRequestBehavior.AllowGet);

它必须在json

中返回selectList
return Json(item_id, JsonRequestBehavior.AllowGet);

答案 1 :(得分:0)

用此替换您的javascript代码。不推荐使用.ajax()方法的方式。

<script language="javascript" type="text/javascript">
    $(function () {
        $("#category_id").change(function() {
            var url = '@Url.Action("GetItemByCategoryId", "Category")';

            $.post(url,
            {
                category_id: $(this).val()
            }).done(function (data) {
                $("#mydiv").text(data[0].Text);                  
            }).fail(function (xhr) {
                var json = $.parseJSON(xhr.responseText);
                alert("Error: " + json.Error);
            });
        });//end change event
    });//end document loading
</script>

答案 2 :(得分:-1)

发表

public ActionResult GetItemByCategoryId(int category_id)
{
    **var itemsobject** = DB.items.Where(s => s.category_id == category_id).ToList();
    SelectList item_id = new SelectList(itemsobject, "item_id", "item_name");
    ViewBag.item_id = item_id;
    return Json(itemsobject, JsonRequestBehavior.AllowGet);
}

转换列表中的Var,这对我有用.....

获取

public ActionResult FillCity(int state)
        {
            using (ASAP_DB_Context DBContext = new ASAP_DB_Context())
            {
                List<city> citiesList = new List<city>();
                var cities = DBContext.Cities.Where(c => c.State_Id == state);
                foreach (var city in cities)
                {
                    citiesList.Add(new city { City_Id = city.City_Id, CityName=city.CityName, State_Id = city.State_Id });
                }
                return Json(citiesList, JsonRequestBehavior.AllowGet);
            }

        }