- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
出于某种原因,我的一个特定 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 View 中的一个 View 模型,我已将其转换为 Javascript 对象。 'url' 是通过 '@Url.Action("Action", "Controller")' 方法生成的 url。 $("#panel") 是被 Controller 操作返回的部分 View 替换的 div 区域。
当我尝试调试项目时,它永远不会到达 Controller 操作。当我创建一个没有参数的虚拟 Controller 操作时,它会以 Debug模式到达那里。但我显然是在发送数据。我可以看到在 Firebug 中发布的数据(虽然由于某种原因它没有结构化)但显然它没有被发送,我不知道为什么。
我在我的代码中使用 CallAndReplace 20 次用于其他用途,它从来没有给我这个问题。我完全不知道为什么。
编辑:这是我发送到 View 的 View 模型类:
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; }
}
以及我要调用的 Controller 操作:
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);
}
Controller 本身没有无参数构造函数方法,我使用的是依赖注入(inject),但我有其他 AJAX 调用可以调用该 Controller 中的各种操作,它们工作正常。我不知道为什么这个不起作用。
最佳答案
错误可能是指您的操作的参数之一的类型(不是 Controller ,正如其他人所建议的那样)。
如果无法先构造参数,则 MVC 无法填充该参数。
例如,您可能会遇到如下相同的错误:
public class ParameterConstructor
{
public ParameterConstructor(string parameter){
}
}
public class MyController : Controller {
public ActionResult Test(ParameterConstructor model) {
return "This action will not be reached";
}
}
所以你需要确保你的model
type 有一个无参数的构造函数。
根据您更新后的代码,您的 ViewModel 构造函数确实是无参数的。
但是,您有一个列表 Tuple<int, string>
. The documentation says that Tuple does not have a parameterless constructor .这就是问题所在——元组被设计为只读的。也许你可以使用 KeyValuePair<>
相反?
关于javascript - 收到 "No parameterless constructor defined"错误,不确定原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8496366/
我是一名优秀的程序员,十分优秀!