【发布时间】:2012-01-19 17:57:54
【问题描述】:
由于某种原因,我的一个特定 AJAX 调用出现“未定义无参数构造函数”错误。代码如下:
CallAndReplace(JSON.stringify(model), url, $("#panel"));
function CallAndReplace(data, url, replace) {
$.ajax({
url: url,
type: "post",
contentType: "application/json; charset=utf-8",
data: data,
success: function (result) {
replace.html(result);
},
error: function (x, e) {
if (x.status == 0) {
alert('You are offline!!\n Please Check Your Network.');
} else if (x.status == 404) {
alert('Requested URL not found.');
} else if (x.status == 500) {
alert('Internal Server Error.');
} else if (e == 'parsererror') {
alert('Error.\nParsing JSON Request failed.');
} else if (e == 'timeout') {
alert('Request Time out.');
} else {
alert('Unknow Error.\n' + x.responseText);
}
}
});
}
'model' 是我的 MVC-3 视图中的视图模型,我已将其转换为 Javascript 对象。 'url' 是通过 '@Url.Action("Action", "Controller")' 方法生成的 url。 $("#panel") 是由控制器操作返回的部分视图替换的 div 区域。
当我尝试调试项目时,它永远不会进入控制器操作。当我创建一个没有参数的虚拟控制器操作时,它会以调试模式到达那里。但我显然是在发送数据。我可以看到在 Firebug 中发布的数据(尽管由于某种原因它不是结构化的)但显然它没有被发送过来,我不知道为什么。
我在我的代码中使用 CallAndReplace 20 次其他用途,它从来没有给我这个问题。我完全不知道为什么。
编辑:这是我发送到视图的视图模型类:
public class AwardsEdit
{
public List<AwardsViewModel> Awards { get; set; }
public int TitleId { get; set; }
public List<Tuple<int, string>> Participants { get; set; }
public List<Award1> AllAwards { get; set; }
public List<Tuple<int, string>> AllAwardCompanies { get; set; }
}
以及我试图调用的控制器操作:
public PartialViewResult SaveAwards(AwardsEdit award)
{
if (ModelState.IsValid)
{
bool updated = _translator.UpdateAward(award);
if (updated)
{
return PartialView("Details", _translator.GetAwards(award.TitleId));
}
//else error
ModelState.AddModelError("", "Award data was not saved.");
}
//on error, load meta data
var data = _translator.GetAwards(award.TitleId, true);
award.Participants = data.Participants;
award.AllAwards = data.AllAwards;
award.AllAwardCompanies = data.AllAwardCompanies;
return ViewAwards(award.TitleId);
}
控制器本身没有无参数的构造方法,我正在使用依赖注入,但我有其他 AJAX 调用可以调用该控制器中的各种操作,并且它们工作正常。我不知道为什么这个不起作用。
【问题讨论】:
-
你能发布你的控制器代码吗?你在做任何依赖注入吗?当我的控制器没有默认的无参数构造函数时,我会收到此错误。
-
那个错误是服务器端的,在你进行 Ajax 调用之前检查你的
data是否包含任何东西,听起来对你的控制器的依赖不适用于那个调用 -
请在您的控制器中发布接受 AJAX 的操作的代码以及它接受的模型的构造函数。我怀疑您正在接受某种类型的模型/视图模型,并且您的模型/视图模型没有采用 0 个参数的构造函数。当 .NET 中的 ModelBinder 尝试将传入的表单转换为您的模型类型时,它要求您的模型有一个接受 0 个参数的构造函数。
-
刚刚发布了动作和视图模型。
-
您回答了自己的问题:“控制器本身没有无参数构造函数方法,我正在使用依赖注入”。您需要深入研究依赖注入以找出为什么它不起作用。
标签: javascript jquery asp.net ajax asp.net-mvc-3