javascript - 使用ajax以mvc模式通过 Controller 发送数据

标签 javascript c# asp.net asp.net-mvc knockout.js

我正在尝试使用 knockout 将数据从我的 UI 发送到 Controller 。这是用于发送我的 ajax 请求 (PUT) 的 javascript

var model = new Object();
model.StudentID = "";
model.ActiveProgram = "";
model.ProgramDesc = self.programData();
model.Cohorts = self.associationData();
model.LoadIntent = self.loadIntentData();
model.Francophone = self.frenchData();
model.Gender = self.genderData();

    $.ajax({
        url: putStudentRegRequirementsUrl,
        type: "PUT",
        contentType: jsonContentType,
        dataType: "json",
        data: JSON.stringify(model),
        //jsonData:model,
        success: function (data) {
            $('#notificationHost').notificationCenter('addNotification', { message: "Updated.", type: "info" });
        },
        error: function (jqXHR, textStatus, errorThrown) {
            if (jqXHR.status != 0)
            {
                $('#notificationHost').notificationCenter('addNotification', { message: "Unable to update registration requirement.", type: "error"});
            }
        }
    });

但是当我调试它以查看我的 Controller 时,输入的字符串是空白的。这是我的 Controller

 [HttpPut]
    public async Task<JsonResult> UpdateRegistrationRequirementAsync(string regRequirementJson)
    {
        try
        {
            var regRequirementModel = JsonConvert.DeserializeObject<RegistrationRequirement>(regRequirementJson);
            var response = await ServiceClient.L09PutRegistrationRequirementAsync(CurrentUser.PersonId, regRequirementModel);
            return Json(response);
        }
        catch( Exception ex)
        {
            Logger.Debug(ex, "Error updating Registration Requirement for user failed.");
            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return Json("Error updating Registration Requirement.");
        }       
    }

最佳答案

Action 将根据名称解析来自客户端的参数,因此您需要传递名称为 regRequirementJson 的参数,其中包含您的 json。所以改变这一行

data: JSON.stringify(model)

data: { regRequirementJson: JSON.stringify(model) }

并删除 contentType: jsonContentType

或者您可以尝试其他方式。由于 ASP.NET 可以自行反序列化 json,因此您可以保持 js 代码不变并将 Controller 更新为

[HttpPut]
public async Task<JsonResult> UpdateRegistrationRequirementAsync(RegistrationRequirement regRequirementModel )
{
    try
    {
        var response = await ServiceClient.L09PutRegistrationRequirementAsync(CurrentUser.PersonId, regRequirementModel);
        return Json(response);
    }
    catch( Exception ex)
    {
        Logger.Debug(ex, "Error updating Registration Requirement for user failed.");
        Response.StatusCode = (int)HttpStatusCode.BadRequest;
        return Json("Error updating Registration Requirement.");
    }       

关于javascript - 使用ajax以mvc模式通过 Controller 发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54408847/

相关文章:

javascript - jQuery 追加,不完全可用?

javascript - 具有最小网络流量的进度条

c# - 在 Gtk 中,如何将 TextView 中的文本垂直居中?

c# - GZipStream 正在切断 XML 的最后一部分

c# - ASP.NET 向其他类公开控件

c# - 在 gridview 中动态设置 DataKeyNames 的值

javascript - 读取 REST POST 响应 node.js

c# - 从 Web.Config 读取变量

c# - 当我实现一个基类也实现的接口(interface)时,为什么我没有收到编译器警告?

Javascript 'Dot Dot Dot' 计算时