使用 ajax 将字符串发送到 ActionResult
Sending a string to ActionResult using ajax
我正在尝试向控制器中的 ActionResult 发送一个字符串。我已经学习了许多教程并阅读了数百个 Whosebug,但无法使其正常工作。我正在尝试发送一个带有单选按钮值的字符串。
我的 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" 的按钮时,程序不会执行 AJAX。它周围的警报确实消失了。
提前致谢:)
可能会有帮助:
[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。
像这样编辑 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”,路由系统将找不到匹配项。
这里有几点需要注意:
- 您的原始解决方案确实显示了警报,这意味着请求已发送到服务器,并且已收到响应。
- Fabio 的回答没有用,因为你(我猜)没有像
"/Aanvraag/Opslaan/theStatus"
这样的路线。即使 string
是可空类型——因此路由系统将允许字符串参数没有来自请求的传入值——客户端设置的 url
参数告诉路由系统 'Hey please forward me to something that is configured to a url like "/Aanvraag/Opslaan/theStatus"' .我确定您没有使用该模式设置任何路由,因此路由系统将无法找到匹配的 Controller/Action 方法对,从而导致 404.
- 您原来的解决方案并没有导致这个问题,因为您将
theStatus
参数作为数据发送,而您的 url
是“/Aanvraag/Opslaan”。这意味着即使是默认路由也能发现Controller是'Aanvraag',controller是'Osplaan'。从那时起,模型绑定就可以将您的 theStatus
参数绑定到操作方法参数。 (如果不是,将调用正确的操作方法,只是为参数提供 null
值。)但是,您的响应没有发送任何带有 属性 [=18 的对象=] 返回,因此您的 if
语句转到 else
分支。
总而言之,您可以将 theStatus
参数作为数据发送并让模型绑定系统将其绑定到您的操作方法参数,或者使用路由为您完成此操作。在后一种情况下,您必须配置正确的路由条目或使用我的修改版本中的查询字符串。
要使 if
语句生效,您需要像 Fabio 那样发回具有 Success
属性 的内容。
我正在尝试向控制器中的 ActionResult 发送一个字符串。我已经学习了许多教程并阅读了数百个 Whosebug,但无法使其正常工作。我正在尝试发送一个带有单选按钮值的字符串。
我的 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" 的按钮时,程序不会执行 AJAX。它周围的警报确实消失了。
提前致谢:)
可能会有帮助:
[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。
像这样编辑 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”,路由系统将找不到匹配项。
这里有几点需要注意:
- 您的原始解决方案确实显示了警报,这意味着请求已发送到服务器,并且已收到响应。
- Fabio 的回答没有用,因为你(我猜)没有像
"/Aanvraag/Opslaan/theStatus"
这样的路线。即使string
是可空类型——因此路由系统将允许字符串参数没有来自请求的传入值——客户端设置的url
参数告诉路由系统 'Hey please forward me to something that is configured to a url like "/Aanvraag/Opslaan/theStatus"' .我确定您没有使用该模式设置任何路由,因此路由系统将无法找到匹配的 Controller/Action 方法对,从而导致 404. - 您原来的解决方案并没有导致这个问题,因为您将
theStatus
参数作为数据发送,而您的url
是“/Aanvraag/Opslaan”。这意味着即使是默认路由也能发现Controller是'Aanvraag',controller是'Osplaan'。从那时起,模型绑定就可以将您的theStatus
参数绑定到操作方法参数。 (如果不是,将调用正确的操作方法,只是为参数提供null
值。)但是,您的响应没有发送任何带有 属性 [=18 的对象=] 返回,因此您的if
语句转到else
分支。
总而言之,您可以将 theStatus
参数作为数据发送并让模型绑定系统将其绑定到您的操作方法参数,或者使用路由为您完成此操作。在后一种情况下,您必须配置正确的路由条目或使用我的修改版本中的查询字符串。
要使 if
语句生效,您需要像 Fabio 那样发回具有 Success
属性 的内容。