簡體   English   中英

在視圖中從JavaScript調用MVC控制器操作

[英]Call MVC Controller Action from a javascript in View

我有這種情況:在MVC視圖javascript函數中,我調用控制器操作並獲取一些xml數據字符串,然后調用另一個控制器操作,在該操作中創建新對象並調用新視圖。 我總是收到錯誤消息:請求“未定義”時出錯:TextStatus:“ parsererror” ErrorThrown:“ SyntaxError:JSON解析:JSON數據第1行第1列意外的字符”

我不知道為什么會這樣。 如果我直接用硬編碼的xml調用第二個控制器動作,那么我會得到正確的結果-新視圖。 如何在不刷新視圖的情況下從javascript函數調用控制器動作?

這是我的代碼:

視圖CompleteFrameBrand中的javascript函數:

function order(model) {
    $.p({
        url: '@Url.Action("CompleteFrameBrandDetails", "PacCompleteFrame")',
        data: { item: model },
        success: function (result) {
            if (result.Success) {
               $.p({
                    url: '@Url.Action("GlassCompleteFrame", "PacModule")',
                    data: JSON.stringify({ b2bXml: result.Data }),
                    success: function (result) {
                        return;
                    }
                });

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

CompleteFrameController :: CompleteFrameBrandDetails(字符串項目)

     public ActionResult CompleteFrameBrandDetails(string item)
    {
        var customerNumber = _workContext.SelectedCustomerNumber;
        var employeeId = _workContext.CurrentCustomer.Ll3Id;
        string b2bxml = _completeFrameService.GetCFB2BXML(employeeId, customerNumber, item, _workContext.WorkingLanguage.LanguageCulture.Substring(3));
        return new JsonResult()
        {
            Data = new
            {
                Success = true,
                Data = b2bxml
            }
        };
    }

PacModuleController :: GlassCompleteFrame:

    public ActionResult GlassCompleteFrame(string b2bXml)
    {
        PacModuleModel model = new PacModuleModel();
        model.CustomerNumber = _workContext.SelectedCustomerNumber;
        model.Language = _workContext.WorkingLanguage.UniqueSeoCode;
        model.Comission = "";
        model.GlassXml = b2bXml.Replace("\"", "\\\"");
        model.Price = Convert.ToDouble(p, System.Globalization.CultureInfo.InvariantCulture);
        model.ReadOnly = false;

        return View("Glass", model);
    }

我假設$.p是jQuery $.ajax的包裝,在這種情況下,將dataType設置為xml應該會有所幫助。 如果沒有顯式設置dataType jQuery將做出最佳猜測,並且似乎認為您正在返回json

您也可能在json某個位置設置了默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM