Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ajax以mvc模式通过控制器发送数据_Javascript_C#_Asp.net_Asp.net Mvc_Knockout.js - Fatal编程技术网

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

Javascript 使用ajax以mvc模式通过控制器发送数据,javascript,c#,asp.net,asp.net-mvc,knockout.js,Javascript,C#,Asp.net,Asp.net Mvc,Knockout.js,使用knockout,我试图将数据从UI发送到控制器。这是用于发送ajax请求(PUT)的javascript 但是当我调试它以查看我的控制器时,输入的字符串是空的。这是我的控制器 [HttpPut] public async Task<JsonResult> UpdateRegistrationRequirementAsync(string regRequirementJson) { try { var re

使用knockout,我试图将数据从UI发送到控制器。这是用于发送ajax请求(PUT)的javascript

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

 [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.");
        }       
    }
[HttpPut]
公共异步任务UpdateRegistrationRequirementAsync(字符串RequirementJSON)
{
尝试
{
var RegrequerementModel=JsonConvert.DeserializeObject(RegrequerementJSON);
var响应=等待ServiceClient.L09PutRegistrationRequirementAsync(CurrentUser.PersonId,RequirementModel);
返回Json(响应);
}
捕获(例外情况除外)
{
调试(例如,“错误更新用户注册要求失败”);
Response.StatusCode=(int)HttpStatusCode.BadRequest;
返回Json(“更新注册要求时出错”);
}       
}

操作将按名称解析来自客户端的参数,因此您需要传递名为
RequirementJSON的参数。所以改变这条线

data: 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.");
    }       
[HttpPut]
公共异步任务更新RegistrationRequirementAsync(RegistrationRequirementModel)
{
尝试
{
var响应=等待ServiceClient.L09PutRegistrationRequirementAsync(CurrentUser.PersonId,RequirementModel);
返回Json(响应);
}
捕获(例外情况除外)
{
调试(例如,“错误更新用户注册要求失败”);
Response.StatusCode=(int)HttpStatusCode.BadRequest;
返回Json(“更新注册要求时出错”);
}       

操作将按名称解析来自客户端的参数,因此您需要传递名为
的参数RequirementJSON
包含您的json。因此更改此行

data: 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.");
    }       
[HttpPut]
公共异步任务更新RegistrationRequirementAsync(RegistrationRequirementModel)
{
尝试
{
var响应=等待ServiceClient.L09PutRegistrationRequirementAsync(CurrentUser.PersonId,RequirementModel);
返回Json(响应);
}
捕获(例外情况除外)
{
调试(例如,“错误更新用户注册要求失败”);
Response.StatusCode=(int)HttpStatusCode.BadRequest;
返回Json(“更新注册要求时出错”);
}       
由于您正在发送“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.");
        }       
    }
[HttpPut]
公共异步任务更新注册要求同步(注册要求注册要求)
{
尝试
{
var响应=等待ServiceClient.L09PutRegistrationRequirementAsync(CurrentUser.PersonId,RegistrationRequirementAsync);
返回Json(响应);
}
捕获(例外情况除外)
{
调试(例如,“错误更新用户注册要求失败”);
Response.StatusCode=(int)HttpStatusCode.BadRequest;
返回Json(“更新注册要求时出错”);
}       
}
由于您正在发送“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.");
        }       
    }
[HttpPut]
公共异步任务更新注册要求同步(注册要求注册要求)
{
尝试
{
var响应=等待ServiceClient.L09PutRegistrationRequirementAsync(CurrentUser.PersonId,RegistrationRequirementAsync);
返回Json(响应);
}
捕获(例外情况除外)
{
调试(例如,“错误更新用户注册要求失败”);
Response.StatusCode=(int)HttpStatusCode.BadRequest;
返回Json(“更新注册要求时出错”);
}       
}

您的模型是一个对象,而您的控制器需要一个字符串。很抱歉,我在堆栈溢出中键入时出错,通过将模型作为jsonTry发送来更正,执行以下操作:UpdateRegistrationRequirementAsync([FromBody]string RequirementJSON)您的模型是一个对象,而您的控制器需要一个字符串。很抱歉,我在输入堆栈溢出时出错,通过将模型作为jsonTry发送来更正:UpdateRegistrationRequirementAsync([FromBody]string RequirementJSON)当尝试调用控制器时,它不再到达此方法。@Jseb我已更新了答案。这很好,您设法使代码工作。当尝试调用控制器时,它不再到达此方法。@Jseb我已更新了答案。这很好,您设法使代码工作。