嗨,很抱歉提出这样一个简单的问题,但我今天整天都在挠头,无法弄清楚这一点。我发现了很多类似的问题,但没有解决我的问题。MVC DropDownListFor如何添加RouteLink
我有一个页面,其中包含产品清单和几个按钮,用于按类别过滤产品。由于产品数量增加,我决定将其更改为下拉框。
所以我有下拉框,其中填充类:其中在触发更改事件
@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"
})
}
UPDATE:
我已经改变了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);
}
任何帮助appriciated
AJAX调用保持在同一页面上。您是否尝试重定向到另一个页面,或者您是否尝试将一些数据加载到当前页面?请发布你'交易'控制器的'List()'方法 – 2014-09-27 00:35:42
我已经更新了这个问题。最好我想更新这个页面上的数据,但如果这是不可能的,我会用你的答案来重定向页面。非常感谢 – Whistler 2014-09-27 08:29:45
您可以通过返回部分视图更新当前页面上的数据。我会尽快更新答案。 – 2014-09-27 08:32:44