2008-09-06 8 views
1

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

は、私が2つのアクションがあります:アカウントを探ししようとしていますが

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

を/削除やアカウントの削除/ユーザー名= ControllerActionInvokerは私の牽引アクション間の曖昧であることが要求を削除しますと言って例外をスローダヴィデ?メソッド。

global.asaxのデフォルトルートは変更されていません。

アクション呼び出し者は、パラメータリストを見て呼び出すメソッドを理解してはいけませんか?

プレビュー4を使用して、私は同じ操作を実行するこれらの種類の問題はありませんでした。

答えて

3

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

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

ここに十分な説明:あなたのURLで私がやるだろう何http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

0

なぜこれが起こっているのかはっきりとは言えません。しかし、削除(文字列のユーザー名)アクションだけを持つことと、パラメータのないオーバーロードを削除することを検討したいと思うかもしれません。

文字列がnullであるため、単にAccount/Deleteを呼び出すとnullのusernameパラメータでアクションが呼び出され、アクションメソッドの先頭でテストできます。

+0

Berko、それは私が望むものではありません。 2つのアクションメソッドは異なるアクションを実行します。メソッドの冒頭でパラメータをテストすることは、実際に行う正しい方法ではありません。あまりにも汚いです。他に何かを見つけ出すだろう。とにかくありがとう –

0

が(空白の削除を捨てている)、そして唯一の(文字列のユーザー名)を削除使用

あなたは "に似た何かを持っていると思いますルーティング/ {コントローラ}/{アクション}/{ユーザー名}/"? "/ {Controller}/{Action}/{Id} /"がある場合、この "/ Account/Delete/davide /"を処理するためにURLを使用するだけで、Delete(文字列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. 
} 

それか、ただでそれをラップする:Idは

は、その後、あなたの削除(文字列ID)メソッドを持っている「」であるデフォルトのようなものである必要があり、あなたのデフォルトルートを使用した

if {} else {}の1つのメソッド

いずれにしても、 eメソッドを使用し、空の文字列のルートでユーザー名/ IDの既定値を設定し、そのように処理します。

あなたが私の情報ページにアンドリュー@私のドメインで私にpingして、私が何を意味するか、何でも助けになるまで私に連絡したい場合。

編集:ああ、とにかく、名前付きアトリビュートがどのように役立つかわかりません - 同じ問題を見つけた他の人のためにここにコメントを投稿してください! :)

+0

あなたが提案したように私のメールを受け取りましたか? –

0

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

関連する問題