2

使用 Form.Begin 时,有没有办法在 ASP.NET MVC 中强制使用命名路由。我越来越多地了解路由,并且害怕如果您只是更改顺序或参数是否具有默认值,它可能会非常脆弱。

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

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

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

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

我尝试使用 RouteLink 并将其嵌入到 Form 标签中,但是 RouteLink 为我创建了一个<A>不好的标签的完整 HTML。

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

我必须从命名路由生成 URL 的替代方法。

我应该将这个丢失的超载报告为问题吗?

4

1 回答 1

2

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

<%= 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 的扩展方法。

于 2009-01-24T00:04:06.083 回答