我正在尝试将一个字符串发送到控制器中的ActionResult。我已经学习了许多教程并阅读了数百个stackoverflow,但无法使其工作。我正在尝试发送一个带有radiobutton值的字符串。
我的ActionResult代码是:
[HttpPost]
public ActionResult Opslaan(string theStatus)
{
if(theStatus!= null)
Database.UpdateAanvraagStatusByGuid(Session["Guid"].ToString(), theStatus);
return new RedirectResult(Request.UrlReferrer.OriginalString);
}
我通过AJAX发送变量的代码:
$("#opslaan").click(function (e) {
e.preventDefault();
var theStatus = $('input[name=StatusOptions]:checked').val();
$.ajax({
type: "POST",
url: "/Aanvraag/Opslaan",
data: theStatus,
success: function (result) {
if (result.Success) {
alert("Uw wijzigingen zijn opgeslagen.");
} else {
alert(result.Message);
}
}
});
});
当我点击我的按钮" opslaan"该程序不执行te AJAX。周围的提醒确实有效。
提前致谢:)
答案 0 :(得分:2)
编辑Fabio的答案如下:
$("#opslaan").click(function (e) {
e.preventDefault();
var theStatus = $('input[name=StatusOptions]:checked').val();
$.ajax({
type: "POST",
url: "/Aanvraag/Opslaan?theStatus= " + theStatus ,
//data: { 'theStatus': theStatus } ,
success: function (result) {
if (result.Success) {
alert("Uw wijzigingen zijn opgeslagen.");
} else {
alert(result.Message);
}
}
});
});
请注意url属性末尾的查询字符串。即使字符串是可以为空的类型,如果您没有任何路由配置,例如" / Aanvraag / Opslaan / theStatus",路由系统将找不到匹配项。
这里有几点需要注意:
"/Aanvraag/Opslaan/theStatus"
这样的路线。即使string
是可空类型 - 因此路由系统将允许字符串参数没有来自请求的传入值 - 客户端设置的url
参数告诉路由系统'嘿请转发给我配置为" / Aanvraag / Opslaan / theStatus"等网址的内容。我确信您没有使用该模式设置任何路由,因此路由系统将无法找到匹配的Controller / Action方法对,从而产生404。theStatus
参数作为数据,而您的url
是" / Aanvraag / Opslaan"。这意味着即使是默认路线也能够发现控制器是“Aanvraag'而控制器是'Osplaan'。从那时起,Model Binding能够将您的theStatus
参数绑定到action方法参数。 (如果不是,那么只要给参数赋予null
值,就会调用正确的操作方法。)但是,您的响应没有发送任何具有属性{{1}的对象返回,所以你的Success
语句转到if
分支。总而言之,您可以将else
参数作为数据发送,让模型绑定系统将其绑定到您的操作方法参数,或使用路由为您执行此操作。在后一种情况下,您必须配置正确的路由条目或使用类似我修改版本的查询字符串。
要使theStatus
语句起作用,您需要发送一些具有if
属性的内容,就像Fabio一样。
答案 1 :(得分:0)
可能会有所帮助:
[HttpPost]
public ActionResult Opslaan(string id)
{
if(id != null)
Database.UpdateAanvraagStatusByGuid(Session["Guid"].ToString(), id);
// do your logic to check if success is true or false
return Json(new { Success = true, Message = "something" });
}
使用Javascript:
$("#opslaan").click(function (e) {
e.preventDefault();
var theStatus = $('input[name=StatusOptions]:checked').val();
$.ajax({
type: "POST",
url: "/Aanvraag/Opslaan/ " + theStatus ,
//data: { 'theStatus': theStatus } ,
success: function (result) {
if (result.Success) {
alert("Uw wijzigingen zijn opgeslagen.");
} else {
alert(result.Message);
}
}
});
});
修改强>
只是为了查看它是否有效,请在Action和Javascript中更改参数的名称。