代码之家  ›  专栏  ›  技术社区  ›  Simon_Weaver

在ASP.NET MVC中使用Form.Begin中的命名路由

  •  2
  • Simon_Weaver  · 技术社区  · 16 年前

    在使用Form.Begin时,是否有办法强制使用ASP.NET MVC中的命名路由。我越来越了解路由,并且害怕如果你只是改变顺序或者参数是否有默认值,路由会变得非常脆弱。

    <% Form.Begin(...) %> <!-- no overload for providing a route name --%> 
    

    对于开始表单的命名路由,似乎没有过载,因此我能想到的最好方法是:

    <form action="/Products/Command/ViewProduct" method="post"> 
    

    我想知道这个丢失的重载是否是一个疏忽(现在是测试版),是否有它的原因或者生成URL的替代方法。

    <A> 不好的标签。

    action="<%= Ajax.RouteLink("Update Status", "product-route-short", new { action = "GetStatus", sku = "" }, new AjaxOptions { UpdateTargetId = "status" })%>"
    

    要从命名路由生成URL,我必须有哪些备选方案。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Andrew Stanton-Nurse    16 年前

    如果需要生成命名路由的URL,可以使用 Url.RouteUrl() ,只需将控制器和操作放入route values对象,如下所示:

    <%= Url.RouteUrl("NamedRoute", new { controller="Controller", action="Action", foo="Bar" ... }) %>
    

    至于添加重载,这些助手中的许多人有太多不同的重载,以至于他们开始冲突并变得模棱两可。例如,考虑下面的重载

    public string BeginForm(string actionName, string controllerName)
    public string BeginForm(string actionName)
    public string BeginForm(string routeName, string actionName) // Uh oh!
    

    第一个和第三个签名相同,因此它们无效。

    如果需要经常使用命名路由,您可以创建自己的表单帮助器作为HtmlHelper的扩展方法。