2014-09-26 62 views
0

嗨,很抱歉提出这样一个简单的问题,但我今天整天都在挠头,无法弄清楚这一点。我发现了很多类似的问题,但没有解决我的问题。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

+0

AJAX调用保持在同一页面上。您是否尝试重定向到另一个页面,或者您是否尝试将一些数据加载到当前页面?请发布你'交易'控制器的'List()'方法 – 2014-09-27 00:35:42

+0

我已经更新了这个问题。最好我想更新这个页面上的数据,但如果这是不可能的,我会用你的答案来重定向页面。非常感谢 – Whistler 2014-09-27 08:29:45

+0

您可以通过返回部分视图更新当前页面上的数据。我会尽快更新答案。 – 2014-09-27 08:32:44

回答

0

看来要重定向到List方法DealController并传递文字选定的选项。如果是的话

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

假设你的操作方法是一样的东西

public ActionResult(string someValue) 

AJAX调用留在同一页上,不重定向到另一页。 出于好奇,为什么重写默认的id(而不是仅仅使用$("#SelectedCategoryId").change(...)?

编辑

如果你想在AJAX成功函数

控制器

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

返回一些HTML,包括在页面上,返回的局部视图和更新页面的html脚本(假设你有一个`id =“结果”的元素,你想渲染返回的HTML)

$("#changeCategory").change(function() { 
    var url = '@Url.Action("List", "Deal")'; 
    var category = $(this).find('option:selected').text(); 
    var page = ? // if you want to pass this as well 
    $.get(url, { category: category, page: page }, function(data) { 
    $('#results').html(data); 
    }); 
}); 
+0

谢谢,请看下面的问题的评论。 – Whistler 2014-09-27 08:30:28

+0

非常感谢,作品太棒了 – Whistler 2014-09-28 14:55:28

0

尝试在你的Ajax调用以下:

type: 'POST' 
+0

我试过了,但结果相同 – Whistler 2014-09-26 21:53:17