У меня есть эта проблема, когда отправляется ajax и данные передаются в контроллер, перенаправление не происходит (также нет ошибки!), На самом деле я знаю, что ajax не является хорошим выбором для этих типовработы (перенаправление и отправка всей страницы назад), но на самом деле, так как я использую localstorage json и хочу отправить обратно эти данные json, я выбрал этот метод, любая помощь и подсказка приветствуются.
вотпредставление:
<div class="row">
<div class="col-xs-3">
<div id="smartcart" hidden></div>
<div class="col-md-6">
<select name="brandList" id="brandList" class="form-control">
@if (Model != null)
{
foreach (var subbrand in Model.Subbrands.Distinct())
{
foreach (var brand in Model.selectedBrands)
{
if (subbrand.Title != brand)
{
<option>@subbrand.Title</option>
}
}
}
}
</select>
</div>
<div class="col-xs-1">
<button type="submit" command="submit" class="btn btn-success" id="btna" value="compare">
compare with this brand
</button>
<script>
$("#btna").click(function (evt) {
var temp = localStorage.getItem("cart");
var value = $('#brandList option:selected').val();
var cart_list = $.ajax({
type: 'POST',
dataType: "json",
data: { cart_list: temp, brandList: value },
url: '@Url.Action("CompareItemsList", "Compare")'
});
});
</script>
</div>
</div>
и вот контроллер:
[HttpPost]
[OutputCache(Duration = 20, VaryByParam = "none")]
public async Task<ActionResult> CompareItemsList(string cart_list, string brandList)
{
var data = JsonConvert.DeserializeObject<List<CartTemplate>>(cart_list);
var equivalantCart = new List<CartTemplate> { };
foreach (var item in data)
{
int temp = Convert.ToInt32(item.product_commonCode);
List<Item> found = db.Items.Where(common => common.CommonCode == temp)
.Where(b => b.Brand == brandList)
.Where(code=>code.Code != item.product_id)
.ToList();
if (found.Count() == 0)
{
var emptyCartItem = new CartTemplate
{
product_commonCode = "0",
product_desc = "-",
product_unit = "-",
product_discount1 = "-",
product_discount2 = "-",
product_discount3 = "-",
product_discount_limit1 = "0",
product_discount_limit2 = "0",
product_discount_limit3 = "0",
product_guarantee = "-",
product_quantity = "0",
product_id = "0",
product_name = item.product_name + " " + item.product_size + " " + "no equivalant exists",
product_price = "0",
product_size = "-",
product_brand = brandList
};
equivalantCart.Add(emptyCartItem);
}
else
{
for (int i = 0; i < found.Count(); i++)
{
var cartItem = new CartTemplate
{
product_commonCode = found[i].CommonCode.ToString(),
product_desc = found[i].Description,
product_discount1 = found[i].DiscountLimit1.ToString(),
product_discount2 = found[i].DiscountLimit2.ToString(),
product_discount3 = found[i].DiscountLimit3.ToString(),
product_quantity = item.product_quantity,
product_id = found[i].Code,
product_name = found[i].ItemName,
product_price = found[i].Price.ToString(),
product_size = found[i].Size.ToString(),
product_brand = found[i].Brand,
product_discount_limit1 = found[i].Limit1.ToString(),
product_discount_limit2 = found[i].Limit2.ToString(),
product_discount_limit3 = found[i].Limit3.ToString()
};
equivalantCart.Add(cartItem);
}
}
}
var obj = new HomePageViewModel
{
ItemTypes = await db.ItemTypes.ToListAsync(),
Categories = await db.Categories.ToListAsync(),
Subcategories = await db.Subcategories.ToListAsync(),
LogoViewModel = await db.LogoViewModels.ToListAsync(),
Brands = await db.Brands.ToListAsync(),
Subbrands = await db.Subbrands.ToListAsync(),
ContactUsViewModel = await db.ContactUsViewModels.ToListAsync(),
selectedBrands = data.Select(s=>s.product_subbrand).Distinct().ToList(),
Cart = equivalantCart
};
});
return View("CompareItemsList",obj);
}
так что проще говоря!Помогите мне, я схожу с ума, потому что у меня есть почти то же самое где-то еще в этом проекте, и это работает, но разница в том, что представление - это модал начальной загрузки 3!
Раньше я делал это так, но вдругперестал работать, и я получил нулевой в моем контроллере:
<div class="col-xs-3">
@using (Html.BeginForm("CompareItemsList", "Compare", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div id="smartcart" hidden></div>
<div class="col-md-6">
<select name="brandList" id="brandList" class="form-control">
@foreach (var item in Model.Subbrands)
{
foreach (var item2 in Model.selectedBrands)
{
if (item.Title != item2)
{
<option>@item.Title</option>
}
}
}
</select>
</div>
<div class="col-xs-1">
<button type="submit" command="submit" class="btn btn-success" id="btna" value="compare">
Compare with this brand
</button>
</div>
<script>
$("#btna").click(function (evt) {
var data = {};
data.CartList = "cart_list";
});
</script>
}
</div>