我需要在post方法上从url获取数据。我在我的asax上有这个路由:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
然后在我的家庭控制器上,在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上工作但不在我的帖子上。我错过了什么?谢谢!
示例网址:
http://localhost:1000/Controller/Action/12312121212
修改:
我也试过这个但没有运气:
var id = ControllerContext.RouteData.Values["id"];
视图上的表单:
@using (Html.BeginForm("SomeNewNameHere", "Home", FormMethod.Post))
答案 0 :(得分:2)
您可以在视图中的帖子网址中添加id
参数:
@using (Html.BeginForm("SomeNewNameHere", "Home",new { id = Model.ID}, FormMethod.Post))
答案 1 :(得分:0)
将int
Id
属性添加到HomeModel
然后在您的视图中,在您的表单中:
@Html.Hiddenfor(m => m.Id)
这会将Id发布到您的操作方法
答案 2 :(得分:0)
在UfukHacıoğulları的帮助下,我在我的表格中提出了这个解决方案:
(Html.BeginForm("SomeNewNameHere", "Home",new { id = ViewContext.RouteData.GetRequiredString("id") }, FormMethod.Post))
所以这里发生的事情是它在发布帖子时包含了id。
答案 3 :(得分:0)
您的Querystring值和Form值会同时自动发送到ActionResult,ASP.Net MVC Model绑定器将尝试绑定它可以的所有内容。
所以你的GET指数ActionResult应该是;
[HttpGet]
public ActionResult Index(int id)
{
// access id directly
}
你的POST索引ActionResult应该是;
[HttpPost]
public ActionResult SomeNewNameHere(int id, HomeModel homeModel)
{
// access id directly
}
因此,您的网址必须为/Home/Index?id=1