Html.BeginForm()中的RouteValueDictionary routeValues有什么用?

6
@{
    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"/>

这是否是使用RouteValueDictionary的实际用途。如果是,我可以通过HTML.BeginForm("About","Home")来实现。

有人能解释一下RouteValueDictionary的实际用途吗?任何帮助都将不胜感激。

2个回答

17

当实现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"}
                        });

7
路由值字典允许我们在定义表单提交地址时更加灵活。并不是人人都只使用控制器/方法来定义表单提交地址。例如,假设我想要将我的表单提交到 /Area/Controller/FormProcessor/Action/Parameter1/Parameter2 ,那么使用简单的 Html.BeginForm("Action", "Controller") 方法就无法实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接