Проверьте данные в AJAX-функции Succes, чтобы перенаправить на конкретный вид - PullRequest
0 голосов
/ 03 мая 2019

Я вызываю функцию javascript, которая вызывает метод действия, который возвращает либо частичное представление, либо полное представление. Я хочу загрузить частичное представление в модальном всплывающем окне, и если это полное представление, то просто хочу перенаправить его.

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 code:

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");
        }
    }

Проблема в том, что когда контроллер возвращает полный вид, он загружается в модальном всплывающем окне, которое мне не нужно. Я просто хочу проверить данные в функции успеха и решить, следует ли загружать модальные для частичного просмотра ИЛИ перенаправить на полный просмотр. Я не уверен, как это сделать.

Может кто-нибудь помочь мне здесь? Спасибо!

UPDATE:

Я смог заставить его работать как

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

Еще один вопрос: Можно ли как-нибудь создать объект ProductModal в javascript и передать его в метод действия Details в ProductTemplate?

1 Ответ

1 голос
/ 03 мая 2019

Если ваше действие возвращает всю вашу страницу, оно будет включать теги <! 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>';
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...