我有一个Javascript文件,在我的代码隐藏中调用一个方法。这似乎可以工作,如果我创建一个无参数的默认构造函数,例1,但我想传递给我的ViewModel的保存方法,例2.当我这样做时,我得到500错误。深入挖掘后,我发现了有关该网络错误的更多细节。
无参数默认构造函数 - 只有在其他构造函数被注释掉时才有效。
示例1
[HttpPost]
public JsonResult SaveWorkRequestDetails()
{
return Json(new {});
}
如果我在代码隐藏文件中同时拥有这两个,那么我会收到此错误:控制器类型'WorkRequestController'上的当前操作请求'SaveWorkRequestDetails'在以下操作方法之间不明确: System.Web.Mvc.JsonResult类型为WorkRequest.Controllers.WorkRequestController的SaveWorkRequestDetails() 类型为WorkRequest.Controllers.WorkRequestController的System.Web.Mvc.JsonResult SaveWorkRequestDetails(WorkRequest.ViewModel.WorkRequestViewModel)
示例2
[HttpPost]
public JsonResult SaveWorkRequestDetails(WorkRequestViewModel viewModel)
{
// TODO: Save logic goes here
return Json(new { });
}
我需要传递viewModel才能保存用户的选择。我错过了什么,我不确定是什么。
RegisterUIEventHandlers: function () {
$('#Save').click(function (e) {
// Check whether the form is valid. Note: Remove this check, if you are not using HTML5
if (document.forms[0].checkValidity()) {
e.preventDefault();
$.ajax({
type: "POST",
url: WorkRequest.SaveUrl,
data: ko.toJSON(WorkRequest.ViewModel),
contentType: 'application/json',
async: true,
beforeSend: function () {
// Display loading image
alert(ko.toJSON(WorkRequest.ViewModel));
},
success: function (result) {
// Handle the response here.
},
complete: function () {
// Hide loading image.
},
error: function (jqXHR, textStatus, errorThrown) {
// Handle error.
}
});
}
});
}
在您在beforeSend中看到的警报中,在上面的javascript中的AJAX POST中,我看到了用户所做的选择。一切正常,所以我只想把它传递给Controller的SaveWorkRequestDetails,我该怎么办呢。我理解数据参数将其传递给url参数中指定的方法。
答案 0 :(得分:0)
错误消息很明确。您有两个具有相同名称的操作方法。因此,如错误所示,对SaveWorkRequestDetails
的呼叫是暧昧的。
您可以在C#中重载函数,但在ASP.NET MVC Framework中是不可能的。
ASP.NET MVC中的同一控制器上不可能有两个SaveWorkRequestDetails()
个具有不同方法签名的操作。
只需删除第一个SaveWorkRequestDetails()
,就可以了。
答案 1 :(得分:0)
我将dataType更改为json而不是application / json。这解决了错误的问题,表明没有无参数的默认构造函数。现在正在调用SaveWorkRequestDetails。
RegisterUIEventHandlers: function () {
$('#Save').click(function (e) {
// Check whether the form is valid. Note: Remove this check, if you are not using HTML5
if (document.forms[0].checkValidity()) {
e.preventDefault();
$.ajax({
type: "POST",
url: WorkRequest.SaveUrl,
data: ko.toJSON(WorkRequest.ViewModel),
dataType: 'json',
async: true,
beforeSend: function () {
// Display loading image
alert(ko.toJSON(WorkRequest.ViewModel));
},
success: function (result) {
// Handle the response here.
},
complete: function () {
// Hide loading image.
},
error: function (jqXHR, textStatus, errorThrown) {
// Handle error.
}
});
}
});