Javascript 使用ajax以mvc模式通过控制器发送数据
使用knockout,我试图将数据从UI发送到控制器。这是用于发送ajax请求(PUT)的javascript 但是当我调试它以查看我的控制器时,输入的字符串是空的。这是我的控制器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
[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我已更新了答案。这很好,您设法使代码工作。