MVC DropDownList为如何添加RouteLink

时间:2014-09-26 21:43:41

标签: javascript jquery asp.net-mvc asp.net-mvc-5.1

很抱歉提出这么简单的问题,但我今天整天都在摸不着头脑,无法解决这个问题。我发现了许多类似的问题,但没有解决我的问题。

我有一个包含产品列表的页面和几个按类别过滤产品的按钮。由于产品数量增加,我决定将它们更改为下拉框。

所以我有一个下拉框,填充类别:

@Html.DropDownListFor(m => m.SelectedCategoryId, Model.CategoryItems, new { id = "changeCategory" })

和更改事件触发的javascript:

<script type="text/javascript">
$(document).ready(function () {
    $("#changeCategory").change(function () {
        var selectedCategory = $(this).text();
        $.ajax({
            url: '@Url.Action("List", "Deal")',
            type: 'GET',
            data: { category: selectedCategory },
            cache: false,
        });
    });
});
</script>

这不起作用。我之前的路由使用以下代码:

@foreach (var link in Model) {
    @Html.RouteLink(link, new {
        controller = "Deal", 
        action = "List",
        category = link,
        page = 1
    }, new {
    @class = "btn btn-block btn-default btn-lg"
    })
}

更新:

我已将jQuery代码更改为:

<script type="text/javascript">
$(document).ready(function () {
    $("#changeCategory").change(function () {
        var selectedCategory = $("#changeCategory option:selected").text();
        $.ajax({
            url: selectedCategory,
            type: 'POST',
            cache: true,
        });
    });
});
</script>

现在链接看起来正确但网站没有重新加载。当我在“网络版Chrome开发者工具”部分中看到此链接时,会显示该链接,当我点击它时会打开正确的页面。

为什么它在网站上没有这样做?

更新2

我的控制器

public ViewResult List(string category, int page = 1)
    {
        DealsListViewModel model = new DealsListViewModel
        {
            Deals = repository.Deals
            .Where(p => category == null || p.Category == category)
            .OrderBy(p => p.DealID)
            .Skip((page - 1) * PageSize)
            .Take(PageSize),
            PagingInfo = new PagingInfo
            {
                CurrentPage = page,
                ItemsPerPage = PageSize,
                TotalItems = repository.Deals.Count()
            },
            CurrentCategory = category
        };
        return View(model);
    }

任何帮助都是适当的

2 个答案:

答案 0 :(得分:0)

在ajax调用中尝试以下操作:

type: 'POST'

答案 1 :(得分:0)

您似乎想要重定向到List的{​​{1}}方法并传递所选选项的文本。如果是那么

DealController

假设您的操作方法类似于

$("#changeCategory").change(function () {
  window.location.href = '@Url.Action("List", "Deal")' + '/' + $(this).find('option:selected').text();
});

AJAX调用保留在同一页面上,不会重定向到另一个页面。 出于好奇,为什么要覆盖默认public ActionResult(string someValue) (而不只是使用id)?

修改

如果要返回一些html以包含在页面上,返回部分视图并在AJAX成功函数中更新页面html

控制器

$("#SelectedCategoryId").change(...

脚本(假设你有一个带有`id =&#34的元素;结果&#34;你想要渲染返回的html的地方)

public PartialViewResult List(string category, int page = 1)
{
  DealsListViewModel model = new DealsListViewModel ....
  ....
  return PartialView(model)
}