Html.BeginForm()中RouteValueDictonary routeValues的用途是什么

时间:2013-08-08 12:51:18

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-2

@{
    ViewBag.Title = "About Us";
}

@using (Html.BeginForm(new RouteValueDictionary { {"Action","Index"}}))
{
<input type="submit" value="submit"/>
}

当我渲染

<form action="/Home/Index" method="post"><input type="submit" value="submit"/>

这是RouteValueDictonary的实际用途吗?如果是这样,我可以通过HTML.BeginForm(“关于”,“主页”)

来做到这一点

有人可以解释RouteValueDictonary的实际用途。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:13)

在为重定向实现ActionFilterAttribute时,这也很有用。此类的基本用法是定义Action名称,Controller名称和Area名称

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filtercontext)
    {
        filtercontext.Result = new RedirectToRouteResult
            (
                new RouteValueDictionary
                    (
                        new
                        {
                            controller = "ControllerName",
                            action = "ActionName",
                            area = "AreaName"
                        }
                    )
            );
        base.OnResultExecuting(filtercontext);
    }
}

您也可以发送如下参数列表..

filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                        {
                            {"action", "ActionName"},
                            {"controller", "ControllerName"},
                            {"area", "Area Name"},
                            {"Parameter Name","Parameter Value"}
                        });

答案 1 :(得分:4)

路由值字典只允许灵活地定义表单POST的位置。不是每个人都停在控制器/行动。例如,假设我希望我的表单发布到/Area/Controller/FormProcessor/Action/Parameter1/Parameter2。我不能通过使用简单的Html.BeginForm("Action", "Controller")方法来做到这一点。