如何从控制器重定向到另一个视图

时间:2017-01-12 22:14:07

标签: c# asp.net-mvc

我想从控制器发布一个函数后重定向到一个视图。这是我的代码:

 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视图不会显示。你知道我的错误在哪里吗?

2 个答案:

答案 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()函数中向表单添加输入,然后提交它,以便您可以在函数中处理逗号分隔值,然后渲染视图。