代码之家  ›  专栏  ›  技术社区  ›  Jseb

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

  •  1
  • Jseb  · 技术社区  · 7 年前

    使用knockout,我试图将数据从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.");
            }       
        }
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Alexander    7 年前

    操作将按其名称解析来自客户端的参数,所以您需要使用名称传递参数 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.");
        }       
    
        2
  •  1
  •   Adam Chawki    7 年前

    由于您正在发送一个“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.");
            }       
        }