Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 将ViewModal从javascript文件传递到代码隐藏_Json_Jquery_Asp.net Mvc 4 - Fatal编程技术网

Json 将ViewModal从javascript文件传递到代码隐藏

Json 将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

我有一个Javascript文件,它在我的代码中调用一个方法。如果我创建了一个无参数的默认构造函数(示例1),这似乎是可行的,但是我想将我的ViewModel传递给save方法(示例2)。当我这样做的时候,我得到一个500的错误。在深入挖掘之后,我发现了关于网络错误的更多细节

无参数默认构造函数-只有在注释掉另一个构造函数时,此方法才有效

例1

[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。不确定原因,但我已经解决了这个问题。