将ViewModel从javascript文件传递给代码隐藏

时间:2013-11-23 02:50:49

标签: json jquery asp.net-mvc-4

我有一个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参数中指定的方法。

2 个答案:

答案 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.
                }
            });
        }
    }); 
相关问题