【发布时间】: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