感谢您抽出时间阅读我的问题...。 解决方案不必与ajax一起使用...我需要任何使该工作如所描述的那样。...
我需要执行以下操作 Image for the site 如果我从广告类型中选择私家车,则仅显示私家车;如果我选择 BMW ,则仅显示BMW,依此类推。 ..我做到了..
问题是当我尝试合并多个搜索参数时
示例:如果我只需要显示特定城市中的宝马的二手车,然后按价格或里程等对结果进行排序...... < / p>
我没有做到这一点...我试图每次都将结果包装为一个列表,然后通过ajax将此列表传递给控制器以执行操作,然后在局部视图中检索它...但是我无法通过此列表(列表(UserCar类))…… 我认为,如果一个慷慨的人引导我正确地进行排序,那么所有搜索参数都将相同...
这是一个视图模型,其中包含usercar模型,该模型具有我要从数据库检索的所有数据
public class VMUserCar
{
public UserCar UserCar { get; set; }
public IEnumerable<UserCar> CarsList { get; set; }
public int? CarsListCount{ get { return CarsList.Count(); } }
}
这是包含部分视图的索引
<div class="searchDiv">
@Html.Partial("~/Views/Partial_Views/_DisplayAds/_SearchResultDisplay.cshtml")
</div>
这是局部视图,它显示了上面站点图像中显示的所有userCars(我尽可能删除了html以减少干扰)
@model CarSales.Models.CarsForSale.VMUserCar
@foreach (var item in Model.CarsList)
{
@item.Year @item.Make @item.Model @item.Badge @item.BodyStyle
@item.DriveType --&& Other stuff--
}
@*SortBy (in the same view)*@
<script>
$(document).ready(function () {
var SortDD = $('#SortDD');
var searchDiv = $('.searchDiv');
var carsList = '@Html.Raw(Json.Encode(Model.CarsList))';
//var carsList1 = JSON.stringify(carsList);
console.log("List: " + carsList);
SortDD.change(function () {
$.ajax({
//processData: false,
traditional: true,
dataType: 'html',
contentType: 'application/json; charset=utf-8',
data: { list: carsList,searchValue: SortDD.val() },
url: '@Url.Action("SortSearch", "DisplayAds")',
type: 'post',
success: function (response) {
searchDiv.empty();
if (response !== null) {
searchDiv.append(response);
} else {
searchDiv.append("Search returns null from sort DD");
}
},
error: function (ex) {
alert("Error from sort DD: ", ex.statusText);
}
});
});
});
</script>
这是将接收ajax的控制器
[HttpPost]
public PartialViewResult SortSearch(string searchValue, IEnumerable<UserCar> list)
{
ViewBag.SortDD = new SelectList(Utilties.GetSortDD(), "Value", "Text", searchValue);
switch (searchValue)
{
case "1":
list = list.OrderByDescending(x => x.AdCreationDate).ToList();
break;
case "2":
list = list.OrderByDescending(x => x.Odometer).ToList();
break;
case "3":
list = list.OrderBy(x => x.Make).ToList();
break;
--& other 10 cases--
var vmUserCar = new VMUserCar() { CarsList = list};
return PartialView("~/Views/Partial_Views/_DisplayAds/_SearchResultDisplay.cshtml", vmUserCar );
} --this is the same partial view which displays all the userCars --
当我运行并且ajax包含以下内容时: contentType:'application / json; charset = utf-8', 它给我“无效的JSON原语:list1。”并且不会继续采取行动...
&当我不带它运行时,它会起作用,但控制器上的列表值始终为空。 我单独尝试了“ @ Html.Raw(Json.Encode(Model.CarsList))”,并且值始终为null,但是当我进行console.log记录时。...我得到json值。
和JSON.stringify(carsList)也为null,但是当我在控制台上登录时根本没有值...
当我将控制器的列表值更改为IEnumerable list 它以一个长字符串行的形式检索值,但我不知道如何将其转换为UserCar类
再次感谢您抽出宝贵的时间阅读所有内容...任何帮助将不胜感激。...
答案 0 :(得分:0)
$(document).ready(function () {
function PassThings()
{
var things = [
{ id: 1, color: 'yellow' },
{ id: 2, color: 'blue' },
{ id: 3, color: 'red' }
];
things = JSON.stringify({ 'things': things });
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
type: 'POST',
url: $("body").attr("data-project-root") + "Administration/Actions/PassThings",
data: things,
success: function () {
$('#result').html('"PassThings()" successfully called.');
},
failure: function (response) {
$('#result').html(response);
}
});
}
PassThings();
});
对于此控制器::
public void PassThings(List<Thing> things)
{
var t = things;
}
对于此ViewModel ::
public class Thing
{
public int Id { get; set; }
public string Color { get; set; }
}
它必须可以工作,我对此进行了重新检查。请您重新检查一次。