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。