从View中的javascript调用MVC Controller Action

时间:2014-07-05 22:46:52

标签: javascript jquery asp.net-mvc json

我有这样的情况:在MVC View javascript函数中我调用控制器动作并获取一些xml数据字符串,然后我调用另一个控制器动作,我在其中创建新对象并调用新视图。我总是收到错误消息: 请求时出错"未定义" : TextStatus:" parsererror" ErrorThrown:" SyntaxError:JSON解析:JSON数据第1行第1列的意外字符"

我不知道为什么会这样。如果我直接用硬编码的xml调用第二个控制器动作,我得到正确的结果 - 新视图。如何在不刷新视图的情况下从javascript函数调用控制器操作?

这是我的代码:

javascript函数查看CompleteFrameBrand:

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(string item)

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

1 个答案:

答案 0 :(得分:0)

我假设$.p是jQuery $.ajax的包装器,在这种情况下将dataType设置为xml应该会有所帮助。如果没有明确地设置dataType,jQuery会做出最好的猜测,而且似乎认为你正在返回json

您也可以在json的某处设置默认值。