FormMethod.Get中的C#MVC路由:如何使用路由表中的路由

时间:2014-10-23 21:26:17

标签: c# asp.net-mvc forms

我有一个FormMethod.Get,它从一个大多数只读形式中获取两个参数。这两个参数是显示只读表单上所有其他值所需的唯一查询参数,因此它们是文本框(大多数值为DisplayFor()或禁用)。通常,我可以通过键入.../Home/Edit/S6/B043导航到我的只读表单。但是,由于这是表单提交,因此会显示类似此.../Home/Edit?Location=S6&Facility=B043的网址。当我提交表单以获取其余数据时,如何让它显示.../Home/Edit/S6/B043的路线?或者我是否必须回到我使用window.location.href =的javascript的原始计划。 谢谢。

@using (@Html.BeginForm("Edit", "Home", routevalues, FormMethod.Get, new { id = "get-card" }))
{
  // code here
}

2 个答案:

答案 0 :(得分:1)

您是否有任何特殊原因要显示不同的网址?每当您提交(GET)表单时,URL将包含您要发送回控制器的所有值和参数,如果您担心,因为有人会使用像... / Home / Edit / S6 /这样的URL访问该站点B043然后你可以像这样将自定义URL添加到你的RoutConfig文件中。

routes.MapRoute("mycustomUrl", "Edit/{param1}/{param2}",
           new { controller = "controllerName", action = "Edit", 
                 param1 = UrlParameter.Optional,
                 param2 =UrlParameter.Optional }); 

之后你可以用... / Home / Edit / S6 / B043来调用你的视图并且可以工作。 如果你想拥有一个友好的URL,你可以使用POST,这样你就不会看到URL上的所有参数,但一切都取决于你想要完成的事情。

答案 1 :(得分:1)

您可以随时手写表单标记并使用UrlHelper创建URL。然后它将在服务器端创建,并根据需要进行适当显示。

<form id="get-card" method="get" action="@Url.Action("Edit", "Home", routevalues)">
<!-- code here -->
</form>