javascript - 检查成功ajax函数中的数据以重定向到特定 View

标签 javascript model-view-controller

我在单击时调用一个 javascript 函数,该函数调用一个返回部分 View 或完整 View 的操作方法。我想在模式弹出窗口中加载部分 View ,如果它是完整 View ,那么只想重定向它。

查看

 foreach(var productTemplate in Products)
   {
     <a href="#" class="btn btn-sm btn-primary" onclick="loadModal('@productTemplate.productId,'@productTemplate.customerId')"> Add New Product</a>
   }


<div class="modal fade" id="mymodel" role="dialog" tabindex="-1">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title">Shared Products</h4>
                <button type="button" class="close" data-dismiss="modal">&times;</button>

            </div>
            <div class="modal-body" id="mymodelbody">

            </div>
        </div>
    </div>

<script>

    var loadModal = function (productId, customerId) {
        $.ajax({
            type: 'GET',
            url: '/NewProductTemplate/CreateNewProduct',
            cache: false,
            data: {
                productId: productId,
                customerId: customerId
            },
            dataType: 'html',
            success: function (data) {;
                $("#mymodelbody").html(data);
                $("#mymodel").modal("show");
            }
        });
    }
</script>

NewProductTemplateController 代码:

public ActionResult CreateNewProduct(Guid productId, Guid customerId)
    {
        var sharedProduct = _productTemplateService.GetSharedProducts(productId);
        var _finalSharedProducts = (sharedProduct.Any(t => t.productId != productId));

        if (_finalSharedProducts)
        {
            var sharedProdctTemplate = _productTemplateService.GetSharedProduct(productId);
            return PartialView("_shared", new SharedModel
            {
                SharedProduct = sharedProdctTemplate
            });
        }
        else
        {
            _productTemplateService.CreateNewProduct(productId);
            return RedirectToAction("Details", "ProductTemplate");
        }
    }

问题是,当 Controller 返回完整 View 时,它会加载到我不想要的模式弹出窗口中。我只想检查 success 函数中的数据,并决定是否加载部分 View 的模式或重定向到完整 View 。我不知道该怎么做。

有人可以帮我吗?谢谢!

更新:

我能够让它像这样工作

if (data.indexOf('<!DOCTYPE html>') != 0) {
                    $("#mymodelbody").html(data);
                    $("#mymodel").modal("show");
                } else {
                    window.location.href = '/ProductTemplate/Details?productTemplateId=' + productId;
                }

还有一个问题: 有什么方法可以在 javascript 中创建 ProductModal 对象并将其传递给 ProductTemplate 的 Details 操作方法吗?

最佳答案

如果您的操作返回整个页面,它将包含 <!DOCTYPE html> 和 标记。您可以检查结果是否以“<!DOCTYPE html>”开头,例如检查它是否是整个页面。

success: function (data) {
            if (!data.startsWith('<!DOCTYPE html>')) {
               $("#mymodelbody").html(data);
               $("#mymodel").modal("show");
            } else {
               window.location.href = '<redirect url here>';
            }
        }

关于javascript - 检查成功ajax函数中的数据以重定向到特定 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55975651/

相关文章:

javascript - Knockout.js:推送项目 -> 指定新的 DOM 元素

javascript - 字符串解析器

c# - 启动没有表单但包含表单的 C# 应用程序

java - 帮助 Java Web 应用程序的初学者

javascript - 我应该在 XMLHttpRequest 中使用什么回调函数来呈现响应?

javascript - 在 AnyTime 日期选择器中以编程方式设置时区偏移

node.js - 绑定(bind)路由到 '/'就是响应Express中的所有404?

c# - 在 MVC 应用程序中使用定时器

ruby-on-rails - Rails 创建新的 MVC

javascript - angularjs.检查表格中是否至少选中了一个复选框