2

Form.Beginを使用するときに、ASP.NETMVCで名前付きルートを強制的に使用する方法はありますか。ルーティングについて学び、順序を変更したり、パラメーターにデフォルトがあるかどうかを変更したりすると、非常に壊れやすくなることを恐れています。

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

フォームを開始するための名前付きルートには過負荷がないようです。そのため、代わりに私が思いつくことができたのはこれでした:

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

この欠落しているオーバーロードが見落としであるかどうか(現時点ではベータ版)、理由があるのか​​、またはURLを生成する別の方法があるのか​​疑問に思います。

RouteLinkを使用してFormタグに埋め込もうとしましたが、RouteLinkによってタグの完全なHTMLが作成されます<A>。これは適切ではありません。

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!

1 番目と 3 番目は署名が同一であるため、無効です。

名前付きルートを頻繁に使用する必要がある場合は、HtmlHelper の拡張メソッドとして独自のフォーム ヘルパーをいつでも作成できます。

于 2009-01-24T00:04:06.083 に答える