Html.BeginForm -> 将 ?myparam=something 传递给 Action - 始终为 null

Html.BeginForm -> passing ?myparam=something to Action - always null

我有一个如下所示的局部视图

  @using (Html.BeginForm("SignIn", "Account", FormMethod.Post, new { ReturnUrl = ViewBag.ReturnUrl], role = "form" }))

用于登录我的网站。

我希望我的用户能够打电话 http://example.com/Account/SignIn?ReturnUrl=somecontroller

但我的 post 数据从未包含添加的参数

我的 GETAction 看起来像

 public ActionResult SignIn(string ReturnUrl)
    {
        ViewBag.ReturnUrl = ReturnUrl;
        return View();
    }

我的 PostAction 看起来像

 public ActionResult SignIn(SignInModel model, string ReturnUrl)

ReturnUrl 始终为 null - 因为表单没有 post 我的参数。

如何获取post参数?

您使用的 BeginForm 方法版本有误。试试这个:

SignIn.cshtml:

@using (Html.BeginForm("SignIn", "Second", new { ReturnUrl = ViewBag.ReturnUrl, role = "form" }, FormMethod.Post, null))
{
    @ViewBag.ReturnUrl

    <input type="submit" value="ok" />
}

控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication2.Controllers
{
    public class SecondController : Controller
    {
        //
        // GET: /Second/

        public ActionResult SignIn(string ReturnUrl)
        {
            ViewBag.ReturnUrl = ReturnUrl;
            return View();
        }

        [HttpPost]
        public ActionResult SignIn(SignInModel model, string ReturnUrl)
        {
            ViewBag.ReturnUrl = ReturnUrl;
            return View();
        }
    }
}

无论如何我不知道你为什么使用路由值而不是仅仅在表单中定义一些字段...