使用 ajax 以 mvc 模式通过控制器发送数据

Posted

技术标签:

【中文标题】使用 ajax 以 mvc 模式通过控制器发送数据【英文标题】:Sending data through controller, in mvc pattern using ajax 【发布时间】:2019-06-21 20:38:48 【问题描述】:

我正在尝试使用淘汰赛将数据从我的 UI 发送到控制器。这是用于发送我的 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");
            
        
    );

但是当我调试它以查看我的控制器时,进入的字符串是空白的。这是我的控制器

 [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.");
               
    

【问题讨论】:

你的模型是一个对象,你的控制器需要一个字符串。 对不起,我在堆栈溢出时输入错误,已将模型作为 json 发送更正 尝试这样做:UpdateRegistrationRequirementAsync([FromBody]string regRequirementJson) 【参考方案1】:

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

data: JSON.stringify(model)

data:  regRequirementJson: JSON.stringify(model) 

并删除contentType: jsonContentType

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

[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.");
           

【讨论】:

当试图调用控制器时,它不再到达这个方法了。 @Jseb 我已经更新了我的答案。这很好,你设法使代码工作。【参考方案2】:

由于您要发送“RegistrationRequirement”对象,因此在您的控制器中您可以这样做:

[HttpPut]
    public async Task<JsonResult> UpdateRegistrationRequirementAsync(RegistrationRequirement registrationRequirement)
    
        try
        
            var response = await ServiceClient.L09PutRegistrationRequirementAsync(CurrentUser.PersonId, registrationRequirement);
            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.");
               
    

【讨论】:

以上是关于使用 ajax 以 mvc 模式通过控制器发送数据的主要内容,如果未能解决你的问题,请参考以下文章

通过 jQuery.Ajax 向 MVC 控制器发送多个项目

多个 ajax 数据到 Spring MVC 控制器

弹出mvc控制器的AJAX后请求中出现未知错误

如何在 ASP.NET MVC 中将 base64String 转换为 blob 并通过 ajax 发送到控制器?

如何使用 AJAX 将数据发布到 ASP.NET MVC 控制器?

MVC 从控制器获取数据以使用 AJAX 查看有啥问题?