我想从控制器发布一个函数后重定向到一个视图。这是我的代码:
function CreateCollectivePdf() {
var objectList = $(".hdnProductId");
var selectedProductIdList = '';
$(".hdnProductId").each(function (index) {
var singleElement = objectList[index];
selectedProductIdList += singleElement.value + ',';
});
$.ajax({
type: "POST",
url: '@Url.Action("CreateEBulletinPdf","EBulletin")',
contentType: "application/json",
dataType: "JSON",
data: JSON.stringify({ "productIdList": selectedProductIdList }),
success: function (result) {
}
});
}
控制器:
public RedirectToRouteResult CreateEBulletinPdf(string productIdList)
{
try
{
productIdList = productIdList.Substring(0, productIdList.Length - 1);
var productIdStrings = productIdList.Split(',');
detailViewModels = productIdStrings.Select(productIdString => PdfProduct(Convert.ToInt32(productIdString))).ToList();
return RedirectToAction("ProductsEBulletin");
}
catch (Exception ex)
{
throw;
}
}
public ActionResult ProductsEBulletin(List<ProductDetailViewModel> _detailViewModels)
{
try
{
return View(_detailViewModels);
}
catch (Exception)
{
throw;
}
}
没有例外,但我的ProductsEBulletin视图不会显示。你知道我的错误在哪里吗?
答案 0 :(得分:0)
好吧,你必须在这个success
AJAX函数中做点什么。现在你把它留空了,所以你不可能期待发生一些事情:
success: function (result) {
}
您可能希望在DOM中的某处显示此结果html,以便在某处看到结果弹出。例如,将它注入某个容器中:
success: function (result) {
$('#someDivId').html(result);
}
现在当然在div元素中显示带有标题的整个HTML会破坏你的DOM。在这种情况下,您可能只希望从服务器返回部分视图,而不包括整个布局:
public ActionResult ProductsEBulletin(List<ProductDetailViewModel> _detailViewModels)
{
return PartialView(_detailViewModels);
}
您还可以注意到我已从ProductsEBulletin
操作中删除了无用的try / catch语句,因为此刻所做的只是传播异常,这不是很有建设性。
好的,现在只将这个部分注入到你需要放在DOM中的某个容器中:
<div id="someDivId"></div>
这就是说,如果你需要重定向到一个全新的位置,那么可能AJAX不是你应该首先使用的东西,而是标准的HTML表单回发。
答案 1 :(得分:0)
您的视图将不会显示,因为ajax函数无法获取视图响应,然后将其显示到浏览器。我通常通过创建一个发布到控制器URL的表单来解决这个问题。在发送之前,您可以以编程方式在CreateCollectivePdf()函数中向表单添加输入,然后提交它,以便您可以在函数中处理逗号分隔值,然后渲染视图。