1

asp.net mvc のプレビュー 5 でのサンプル ルーティングに問題があります。

AccountController には 2 つのアクションがあります。

public ActionResult Delete()  
public ActionResult Delete(string username)

Account/Delete または Account/Delete?username=davide を検索しようとすると、ControllerActionInvoker は、2 つのアクション メソッド間で削除要求があいまいであることを示す例外をスローします。

global.asax の既定のルートは変更されていません。

アクションの実行者は、パラメーター リストを参照して、呼び出すメソッドが何であるかを理解するべきではありませんか?

プレビュー 4 を使用すると、同じ操作を実行してもこの種の問題は発生しませんでした。

何か案が?

4

4 に答える 4

3

解決策が見つかりました!

ActionNameAttribute の導入により、リクエストに応じて呼び出すメソッドを手動でフィルタリングする必要があります。これは、ActionSelectionAttribute によって行われます。

完全な説明はこちら: http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

于 2008-09-06T12:44:07.523 に答える
0

私がすることは、空白のDelete()を捨てて、Delete(string username)のみを使用することです。

URLルーティングには、「/ {​​Controller} / {Action} / {username} /」のようなものがありますか?「/{Controller}/ {Action} / {Id} /」がある場合は、Delete(string id)を実行する方がよいでしょう。そうすれば、URLを使用してこの「/ Account / Delete /davide/」を処理するだけです。

つまり、デフォルトIDは「」のようなデフォルトルートを使用する必要があります。

次に、Delete(string id)メソッドに次のようにします。

public ActionResult Delete(string id)
{
    if(string.IsNullOrEmpty(id)) return EmptyID();

    // Continue normal Delete method
}

public ActionResult EmptyID()
{
    // The method you were going to have on a blank delete.
}

それか、if {}else{}の1つのメソッドにまとめるだけです。

いずれにせよ、私は1つの方法を使用して、空の文字列のルートでユーザー名/ IDのデフォルトを実行し、その方法で処理します。

私が何を意味するか、または何か助けになることについてさらにフォローアップするために私に連絡したい場合は、私の情報ページのandrew@mydomainで私にpingしてください。

編集:ああ、とにかくBerkoが言ったこととほぼ同じですが、名前付き属性がどのように役立つかわかりません-同じ問題を見つけた他の人のために、ここにコメントを投稿してください!:)

于 2008-09-08T05:01:31.033 に答える
0

2 つのコントローラー アクションが同じポスト メソッドであるため、あいまいです。たとえば、HTTP ポストを使用するフォーム データを送信するなど、フォーム ポスト シナリオでのみ使用できます。

于 2008-12-22T17:51:59.750 に答える
0

なぜこれが起こっているのか、はっきりとは言えません。ただし、Delete(string username) アクションのみを使用し、パラメーターのないオーバーロードを削除することを検討することをお勧めします。

文字列は null 可能であるため、Account/Delete を呼び出すだけで null ユーザー名パラメーターを使用してアクションが呼び出され、アクション メソッドの先頭でテストできることを理解しています。

于 2008-09-06T10:45:15.187 に答える