【问题标题】:Call MVC Controller Action from a javascript in View从视图中的 javascript 调用 MVC 控制器操作
【发布时间】:2014-07-05 22:46:52
【问题描述】:

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

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

这是我的代码:

完整框架品牌视图中的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);
    }

【问题讨论】:

  • 确定第一个请求是 XML 吗?它看起来更像 JSON。错误究竟是在哪里引发的?为第二个请求构建数据时?发送第二个请求时?当收到第二个请求的响应时?回应是什么?它看起来像一个视图,您打算如何处理响应?目前你的 success 处理程序什么都不做。
  • 在第一个请求中,我得到字符串,并且我在第二个请求中作为参数转发该字符串,但在这种情况下,我不想要任何响应,因为我想显示其他视图。在第二个请求时抛出错误,我认为是响应,但我不知道如何在没有 ajax 的情况下调用控制器操作。
  • 在您的第二个请求中,您将返回 ViewResult,而不是像您的第一个请求那样返回 JSONResult。这个Glass 视图返回的是什么?我猜它不是 JSON 或 XML。
  • 你是对的。在 Glass 视图中,我不返回任何内容。我不认为我可以调用 View("Glass", model);独立并返回一些虚拟的 JSONResult。我会试试的。谢谢你的提示。
  • 嗯,这行不通。我需要的是在不使用 Ajax 的情况下从 javascript 函数调用 Controller Action。我怎样才能做到这一点? window.location = url 直接进入查看,但我需要调用控制器操作。

标签: javascript jquery asp.net-mvc json


【解决方案1】:

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

您也可能在某处为 json 设置了默认值。

【讨论】:

    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多