简体   繁体   中英

How to show View after Ajax call to a Controller

I cant figured out how to show whole page after Ajax call to Controler. After 'Order' buton click I call javascript function where I make Ajax call to controler action to get XML in string and with that string I call another controller action where I return model. In last step I want to call third controller action with return View(model) but I get null object parameter.

function order(model) {
    $('#details-container').html("<h2>Loading Complete Frame Module. Please wait...</h2>");
    $.p({
        url: '@Url.Action("CompleteFrameBrandDetails", "PacCompleteFrame")',
        data: { item: model },
        success: function (xml) {
            if (xml.Success) {

                $.p({
                    url: '@Url.Action("GlassCompleteFrame", "PacModule")',
                    data: JSON.stringify({ b2bXml: xml.Data }),
                    success: function (model) {
                        var pacModuleModel = {
                            CustomerNumber: model.Data.CustomerNumber,
                            Language: model.Data.Language,
                            Comission: model.Data.Comission,
                            GlassXml: model.Data.GlassXml,
                            Price: model.Data.Price,
                            ReadOnly: model.Data.ReadOnly,
                            Mode: model.Data.Mode,
                            IframeUrl: model.Data.Mode
                        };
                        var url = '@Url.Action("GlassCompleteFrameView", "PacModule", "__view__")';
                        window.location.href = url.replace("__view__", JSON.stringify(pacModuleModel));
                    }
                });


            } else {
                $.alert({
                    message: 'error while trying to load xml details'
                });
            }
        }
    });

}

    public ActionResult GlassCompleteFrame(string b2bXml)
    {
        string mode = "5";

        //If the Store isn't selected, redirect to HomePage
        if (string.IsNullOrEmpty(_workContext.SelectedCustomerNumber))
        {
            return RedirectToRoute("HomePage");
        }
        else
        {
            PacModuleModel model = new PacModuleModel();
            model.CustomerNumber = _workContext.SelectedCustomerNumber;
            model.Language = _workContext.WorkingLanguage.UniqueSeoCode;
            model.Comission = "";
            if (b2bXml == null || b2bXml == String.Empty)
            {
                return RedirectToRoute("HomePage");
            }
            else
            {
                model.GlassXml = b2bXml.Replace("\"", "\\\"");
            }
            int index = b2bXml.IndexOf("<price>") + "<price>".Length;
            string p = b2bXml.Substring(index, b2bXml.IndexOf("</price>") - index);
            model.Price = Convert.ToDouble(p, System.Globalization.CultureInfo.InvariantCulture);
            model.ReadOnly = false;
            model.Mode = ModuleMode.ByProduct;
            model.IframeUrl = "http://ItkCompleteConfiEmbedded.aspx?lang=" + _workContext.WorkingLanguage.LanguageCulture; //_pacGeneralSettings.GlassModuleUrl + ;

            return new JsonResult()
            {
                Data = new
                {
                    Success = true,
                    Data = model
                }
            };
        }
    }


    public ActionResult GlassCompleteFrameView(PacModuleModel model)
    {
        // here I get null model parameter
        return View("Glass", model);
    }

Curently I don't know how to pass model to the last action controller. Thank you nice people for help.

If I understand correctly, something like this should do the trick:

Let's say you have, in your controller MyModelController :

public ActionResult SomePage(MyModel myModel){
  return View(myModel);
}

To naviguate to that page, you could do:

<script>
  window.location.href = "@Url.Action("SomePage", "MyModel", myModelObject)";
</script>

I hope this helps!

I use Session variable to get model in GlassCompleteFrameView(PacModuleModel model) and works perfect. I set Session variable in public ActionResult GlassCompleteFrame(string b2bXml).

public ActionResult GlassCompleteFrameView(PacModuleModel model)
{
    model = Session["xml"] as PacModuleModel;
    return View("Glass", model);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM