Json 将ViewModal从javascript文件传递到代码隐藏
我有一个Javascript文件,它在我的代码中调用一个方法。如果我创建了一个无参数的默认构造函数(示例1),这似乎是可行的,但是我想将我的ViewModel传递给save方法(示例2)。当我这样做的时候,我得到一个500的错误。在深入挖掘之后,我发现了关于网络错误的更多细节 无参数默认构造函数-只有在注释掉另一个构造函数时,此方法才有效 例1Json 将ViewModal从javascript文件传递到代码隐藏,json,jquery,asp.net-mvc-4,Json,Jquery,Asp.net Mvc 4,我有一个Javascript文件,它在我的代码中调用一个方法。如果我创建了一个无参数的默认构造函数(示例1),这似乎是可行的,但是我想将我的ViewModel传递给save方法(示例2)。当我这样做的时候,我得到一个500的错误。在深入挖掘之后,我发现了关于网络错误的更多细节 无参数默认构造函数-只有在注释掉另一个构造函数时,此方法才有效 例1 [HttpPost] public JsonResult SaveWorkRequestDetails() { return Json(new
[HttpPost]
public JsonResult SaveWorkRequestDetails()
{
return Json(new {});
}
如果代码隐藏文件中包含这两个选项,则会出现以下错误:控制器类型“WorkRequestController”上的当前操作请求“SaveWorkRequestDetails”在以下操作方法之间不明确:
类型为WorkRequest.Controllers.WorkRequestController的System.Web.Mvc.JsonResult 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帖子中,我看到了用户所做的选择。一切正常,所以我只想将其传递给控制器的SaveWorkRequestDetails,我如何才能做到这一点。据我所知,数据参数将其传递给url参数中指定的方法。错误消息很清楚。您有两个同名的操作方法。因此,如错误所示,调用
SaveWorkRequestDetails
是含糊不清的
您可以在C#中重载函数,但在ASP.NET MVC框架中是不可能的
在ASP.NET MVC中,同一控制器上不可能有两个具有不同方法签名的SaveWorkRequestDetails()
操作
只需删除第一个
SaveWorkRequestDetails()
,就可以了。我将数据类型改为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.
}
});
}
});
我添加了一个没有任何参数的,因为示例2从未被调用。理想情况下,我只希望将您看到的Save方法作为第二个示例。从未调用是指WorkRequestViewModel为null还是ajax请求从未发送?我的意思是,我在那里放置了一个断点,但从未到达该断点。如果我只有示例2中的Save方法,我会得到一个不同的错误:没有为此对象定义无参数构造函数。我在这里查看了一下:并将我的Index.cshtml更改为:@Html.DropDownListFor(m=>m.WorkSections.SelectedValue,Model.WorkSections,“-->Select Item Ok,我现在调用了示例2中的Save方法,但我的ViewModel为null。不确定原因,但我已经解决了这个问题。