仅更改当前路线的某些值

时间:2012-10-27 18:01:30

标签: c# asp.net-mvc routes

我的搜索页面有很多参数,在这个页面中我有一些当前搜索的过滤器 我只想改变路线中的一些值。

一个例子:

http://www.example.com/{controller}/{action}/{brand}/{model}/{color}/{price}

在我的搜索页面中,我有一个可以更改颜色和价格的表单:

HTML:

@using (Html.BeginForm("action", "controller", FormMethod.Post))
{
    @Html.DropDownListFor(m => m.Color, Model.Colors)
    @Html.DropDownListFor(m => m.Price, Model.Prices)
    <input type="submit" value="Search" />

}

控制器:

[HttpPost]
public ActionResult Action(SearchModel search)
{
    //I can get the Price and Color
    string color = search.Color;
    string price = search.Price;

    //Now I want to get the values of brand and model

    return RedirectToRoute("Action",new
    {
         controller = "Controller",
         action = "Action",
         color = color,
         price = price,
         brand = ????,
         model = ????
    });

}

我的搜索有比这更多的参数......我不想把它们放在隐藏的字段中并随模型一起发送:\

由于

2 个答案:

答案 0 :(得分:0)

为什么不把它们放在QueryString中呢?然后它看起来像这样:

http://www.example.com/something.aspx?color=red&price=100

然后你可以拿起你想要的东西,忽略其余的,顺序也无关紧要。

希望这能回答你的问题,说实话并不是真的理解。

答案 1 :(得分:0)

我找到了解决方案。

我需要这样做:

@using (Html.BeginForm("action", 
                       "controller", 
                       new { brand = ViewContext.RouteData.Values["brand"],
                             model = ViewContext.RouteData.Values["model"] },
                             FormMethod.Post))
{
    @Html.DropDownListFor(m => m.Color, Model.Colors)
    @Html.DropDownListFor(m => m.Price, Model.Prices)
    <input type="submit" value="Search" />

}

然后在控制器中:

[HttpPost]
public ActionResult Action(SearchModel search)
{

    return RedirectToRoute("Action",new
    {
         controller = "Controller",
         action = "Action",
         color = search.Color,
         price = search.Price,
         brand = search.Brand,
         model = search.Model
    });

}

如果有人知道其他解决方案,请告诉我。 谢谢。