2012-01-16 54 views
2

我在我的视图和相应的提交按钮上有一个表单。该表格负责选择某些优惠搜索的选项。主页网址如下:asp.net mvc提交表单并显示url中的所有表单参数

http://localhost/ 

当我点击提交按钮时,调用适当的控制器的动作。但是,我希望所有表单的参数都暴露在url中(因此可能会共享2个人之间的链接,例如他们会得到相同的结果)。 因此,例如,我怎么能实现(例如)类似的东西:

http://localhost/?startDate=20120215&endDate=20120230&catalog=ISA 

回答

3

如果您使表单的方法为GET,所有变量将成为查询字符串的一部分。

您可以使用此重载以改变窗体的请求类型:

FormExtensions.BeginForm Method (HtmlHelper, String, String, FormMethod)

或者,如果你使用RedirectToAction,你可以传递参数的对象:

Controller.RedirectToAction Method (String, Object)

+0

是的,我试过这个,但是在我的控制器的动作被调用后,我使用RedirectToAction方法重定向到不同的控制器的动作,在视图中我的结果列表中 – 2012-01-16 23:13:41

+0

谢谢xixonia – 2012-01-16 23:29:35

0

提交使用httpGET法的形式,让您的形式呈现的输出会像

<form method="get">...</form> 
1

您应该指定表单使用GET请求(而不是发布)提交,并指定您希望重定向到的操作,以便不必使用RedirectToAction。

例如:

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult NextAction(IndexModel model) 
    { 
     return View(); 
    } 
} 

型号:

public class IndexModel 
{ 
    public string StartDate { get; set; } 

    public string EndDate { get; set; } 

    public string Catalog { get; set; } 
} 

检视:

@model MvcApplication22.Models.IndexModel 

@using (Html.BeginForm("NextAction", "Home", FormMethod.Get)) 
{ 
    <p>Start Date: @Html.EditorFor(m => m.StartDate)</p> 
    <p>End Date: @Html.EditorFor(m => m.EndDate)</p> 
    <p>Catalog: @Html.EditorFor(m => m.Catalog)</p> 
    <input type="submit" value="submit" /> 
} 

但请注意,在GET HTTP请求中对系统进行任何更改不是最佳实践。如果要进行任何更改,则应在POST请求中执行这些更改。