在.NET MVC 3中,如何让我的SearchViewModel ID属性使用我的自定义路由?

时间:2012-07-16 14:13:32

标签: .net asp.net-mvc asp.net-mvc-3 razor

我定义了以下自定义路线:

routes.MapRoute(
               "EditSearch",
               "EditUser/Edit/{userId}",
               new { controller = "EditUser", action = "Edit" }
           );

当我手动输入URL时,路径完全正常。但是,当我的搜索页面的GET表单发布时,该网址会显示为../EditUser/Edit/?userId=aaa9999。 GET表单在我的Search.cshtml文件中定义为@using (Html.BeginForm("Edit", "EditUser", FormMethod.Get )),并应将userId参数发送到编辑操作。

我的Search.cshtml页面有一个Html.EditorFor(model => model.userId),其中包含我希望在我的URL地址中显示的userId参数。

我希望我的搜索页面指向"搜索"按下按钮:

../EditUser/Edit/aaa9999

P.S。我知道EditUser控制器名称和编辑操作名称是多余的,但我稍后会修复它。

2 个答案:

答案 0 :(得分:1)

您可以将路线值传递给BeginForm方法。

@using(Html.BeginForm("Edit", "EditUser", new { userId = Model.userId }, FormMethod.Get))
{
   ...
}

通常在编辑模型时,您的网址通常如下所示

http://mysite.com/users/edit/1

当您提交表格GET或POST(我建议使用POST)时,表格使用当前网址,在这种情况下您只需要使用,

@using(Html.BeginForm())
{
  ...
}

生成的表单看起来像

<form action="/" method="post">
   ...
</form>

答案 1 :(得分:0)

只需要添加userId参数,其余就可以了。它可以正常工作。

routes.MapRoute(
               "EditSearch",
               "EditUser/Edit/{userId}",
               new { controller = "EditUser", action = "Edit", userId="" }
           );