C# 如何从get操作mvc重定向到post操作
我有以下行动:C# 如何从get操作mvc重定向到post操作,c#,asp.net-mvc,http,C#,Asp.net Mvc,Http,我有以下行动: [HttpGet] [AllowAnonymous, OnlyAnonymous] public ActionResult VerifyVoucherCode() { var model = new VerifyVoucherCodeModel(); model.VoucherCode = Request.GetFirstQueryValue("token
[HttpGet]
[AllowAnonymous, OnlyAnonymous]
public ActionResult VerifyVoucherCode()
{
var model = new VerifyVoucherCodeModel();
model.VoucherCode = Request.GetFirstQueryValue("token", "voucherCode");
if (!string.IsNullOrEmpty(model.VoucherCode))
{
// prepopulates the code for the user already in a form
}
return View(model);
}
以及用户提交表单时的POST操作:
[HttpPost, AjaxOnly]
[AllowAnonymous, OnlyAnonymous]
[ValidateAntiForgeryToken]
public ActionResult VerifyVoucherCode(VerifyVoucherCode model)
{
return ExecuteAction(() =>
{
// do something
});
}
我想更改逻辑,这样,如果凭证代码在请求中,用户就可以自动提交表单,而不必自己提交表单(即,它直接将用户带到该Post操作)。我已经看了很多堆栈溢出问题和答案,似乎我无法重定向到Post操作。我还尝试创建了第二个Get操作,该操作调用Post操作,但也不起作用。有人知道解决这个问题的正确方法吗
谢谢假设模型包含凭证的单个字符串,您可以执行以下操作:
[HttpGet]
[AllowAnonymous, OnlyAnonymous]
public ActionResult VerifyVoucherCode(string id)
{
if(string.IsNullOrEmpty(id))
{
MyModel model1 = new MyModel();
...
return View(model1);
}
//otherwise process the voucher here
...
return RedirectToAction("SuccessMsg");
}
您可以返回一个包含表单的视图,以及一些javascript,以便在页面加载时自动提交表单。或者,如果验证操作可以直接保存数据,那么为什么要使用另一个操作方法,为什么不直接说
if(!string.IsNullOrEmpty(model.VoucherCode))呢{//code保存数据在这里}
?谢谢@ADyson-保存数据是什么意思?因为我希望表单在有数据的情况下自动提交您在VerifyVoucherCode方法中的注释是“为表单中已经存在的用户预填充代码”。这意味着您已经拥有提交表单所需的所有数据。VerifyVoucherCode(VerifyVoucherCode模型)是什么
方法在收到数据时实际会做什么?在我看来,您可以简单地让第一个方法做同样的事情,而不是试图从另一个方法调用一个操作方法。代码的第一部分是一个很好的实践-从操作方法的参数中读取id
,而不是使用Request.GetFirstQueryValue
。我同意OP应该采用此方法读取传入值。但是……它不能回答他们实际提出的问题。他们不能使用重定向到操作
,因为他们要调用的操作接受POST请求,重定向只能是GET。