C#MVC将表单数据作为URL参数

时间:2014-06-06 09:56:36

标签: c# asp.net-mvc forms

我有一个控制器,它接受来自提交表单的3个值,这很好。

现在我需要做的是启用生成的链接将相同的数据发布到控制器。

控制器如下所示:

[HttpPost]
        public ActionResult Customer(string lastName, string postCode, string quoteRef)
        {

         // Using passed parameters here

        }

我知道路由允许更漂亮的URL,但在这种情况下,我需要表单能够通过提交的表单或以下的超链接格式接受这三个值:

path.to.url/Home/Customer?lastName={1}&postcode={2}&quoteRef={3}

我已研究过路由但我无法找到任何可以让我实现这一结果的东西。

我的路线目前设置如下:

routes.MapRoute(
                "Customer",
                "{controller}/{action}/{id}/{lastName}/{postCode}/{quoteRef}", 
                new {controller = "Home", action = "Customer", id = ""}
                );

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

2 个答案:

答案 0 :(得分:3)

只需将表单操作方法设置为使用GET而不是POST将参数作为查询字符串发送

@using (Html.BeginForm("Customer", "Controller", FormMethod.Get

使用HttpGet

装饰操作方法
[HttpGet]
public ActionResult Customer(string lastName, string postCode, string quoteRef)
{
}

答案 1 :(得分:2)

path.to.url/Home/Customer?lastName={1}&postcode={2}&quoteRef={3}

这仅适用于[HttpGet]属性,而不适用于[HttpPost]

所以你的方法应该是这样的:

[HttpGet]
public ActionResult Customer(string lastName, string postCode, string quoteRef)
{

// Using passed parameters here

}

如果你仍想使用[HttpPost],你应该在GETPOST方法之间做一点点差异,就像这里一样 - 你不能让这些方法具有相同的参数。

网址:path.to.url/Home/Customer?lastName={1}&postcode={2}&quoteRef={3}&method={4}

[HttpGet]
public ActionResult Customer(string lastName, string postCode, string quoteRef, string method)
    { .. }