簡體   English   中英

使用Ajax以MVC模式通過控制器發送數據

[英]Sending data through controller, in mvc pattern using ajax

我使用淘汰賽試圖將數據從用戶界面發送到控制器。 這是用於發送我的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.");
        }       
    }

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

由於您要發送“ 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.");
        }       
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM