gpt4 book ai didi

javascript - 收到 "No parameterless constructor defined"错误,不确定原因

转载 作者:数据小太阳 更新时间:2023-10-29 05:06:27 54 4
gpt4 key购买 nike

出于某种原因,我的一个特定 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/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com