从post方法mvc3上的url获取值
本文关键字:url 获取 上的 mvc3 post 方法 | 更新日期: 2023-09-27 18:28:30
我需要从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");
}
我在这里的问题是,我需要从我的帖子方法上的url中获得id。通过调试,我注意到它获取了get方法的id,但当我发布它时,它会返回一个null,从而导致一个错误。所以基本上,RouteValues在Get上有效,但在我的Post上无效。我错过了什么吗?谢谢
示例url:
http://localhost:1000/Controller/Action/12312121212
编辑:
我也试过这个,但没有运气:
var id = ControllerContext.RouteData.Values["id"];
视图上的表单:
@using (Html.BeginForm("SomeNewNameHere", "Home", FormMethod.Post))
您可以将id
参数添加到视图中的帖子URL:
@using (Html.BeginForm("SomeNewNameHere", "Home",new { id = Model.ID}, FormMethod.Post))
将int
Id
属性添加到HomeModel
然后在你看来,在你的表格中:
@Html.Hiddenfor(m => m.Id)
这将把Id发布到您的操作方法
在Ufuk Hacıoğulları的帮助下,我在我的表单上提出了这个解决方案:
(Html.BeginForm("SomeNewNameHere", "Home",new { id = ViewContext.RouteData.GetRequiredString("id") }, FormMethod.Post))
所以这里发生的是,它在发布帖子时包含了id。
Querystring值和Form值同时自动发送到ActionResult,ASP.Net MVC模型绑定器将尝试绑定它所能绑定的一切。
因此,您的GET索引ActionResult应该是;
[HttpGet]
public ActionResult Index(int id)
{
// access id directly
}
您的POST索引ActionResult应该是;
[HttpPost]
public ActionResult SomeNewNameHere(int id, HomeModel homeModel)
{
// access id directly
}
因此,您的URL需要是/Home/Index?id=1