很抱歉提出这么简单的问题,但我今天整天都在摸不着头脑,无法解决这个问题。我发现了许多类似的问题,但没有解决我的问题。
我有一个包含产品列表的页面和几个按类别过滤产品的按钮。由于产品数量增加,我决定将它们更改为下拉框。
所以我有一个下拉框,填充类别:
@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);
}
任何帮助都是适当的
答案 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)
}