0

我需要从我的 post 方法的 url 中获取数据。我的 asax 上有这个路由:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

然后在我的 Home Controller 上,在 Get 下:

[HttpGet]
public ActionResult Index()
{
    var id = ControllerContext.RouteData.GetRequiredString("id");
}

并在帖子上:

[HttpPost]
public ActionResult SomeNewNameHere(HomeModel homeModel)
{
    var id = ControllerContext.RouteData.GetRequiredString("id");
}

我的问题是我需要来自我的 post 方法的 url 的 id。通过调试,我注意到它在 get 方法上获取了 id,但是当我发布它时,它返回一个 null 导致错误。所以基本上,RouteValues 对 Get 有效,但对我的 Post 无效。我在这里错过了什么?谢谢!

示例网址:

http://localhost:1000/Controller/Action/12312121212

编辑

我也试过这个但没有运气:

var id = ControllerContext.RouteData.Values["id"];

视图上的表格:

@using (Html.BeginForm("SomeNewNameHere", "Home", FormMethod.Post))
4

4 回答 4

2

id您可以在视图中向帖子 URL添加参数:

@using (Html.BeginForm("SomeNewNameHere", "Home",new { id = Model.ID}, FormMethod.Post))
于 2013-08-21T11:04:58.350 回答
0

在 Ufuk Hacıoğulları 的帮助下,我在我的表单上提出了这个解决方案:

(Html.BeginForm("SomeNewNameHere", "Home",new { id = ViewContext.RouteData.GetRequiredString("id") }, FormMethod.Post))

所以这里发生的事情是它在发布帖子时包含 id。

于 2013-08-21T11:16:24.703 回答
0

您的 Querystring 值和 Form 值同时自动发送到 ActionResult,ASP.Net MVC 模型绑定器将尝试绑定它可以绑定的所有内容。

所以你的 GET Index ActionResult 应该是;

[HttpGet]
public ActionResult Index(int id)
{
    // access id directly
}

你的 POST Index ActionResult 应该是;

[HttpPost]
public ActionResult SomeNewNameHere(int id, HomeModel homeModel)
{
    // access id directly
}

所以你的网址需要是/Home/Index?id=1

于 2013-08-21T11:32:27.147 回答
0

添加和int Id属性到您的HomeModel

然后在您看来,在您的表格中:

@Html.Hiddenfor(m => m.Id)

这会将 ID 发布到您的操作方法

于 2013-08-21T10:58:06.530 回答