0

私はasp.netMVCを初めて使用するため、次の方法を実装する方法を決定する必要があります。誰かが私を正しい方向に向けてくれませんか

私はすべてがうまく機能する顧客を作成するためのビューを提供するコントローラーを持っています

請求書を作成するためのビューを提供する別のコントローラーがあります。しかし、請求書を作成するには、すべて正常に機能している顧客を検索する必要があります。顧客が見つからない場合は、顧客の作成ビューを提供し、顧客を作成してから、請求書の作成に戻る必要があります。

したがって、私の質問は、請求書コントローラーから顧客コントローラーに顧客を作成させ、その顧客の詳細を取り戻し、詳細を請求書ビューにプラグインする方法です。

これらのコントローラー/ビューはさまざまな領域に存在します

4

2 に答える 2

0

コントローラーは特定の要求 (顧客の取得、顧客の表示、請求書の作成) に対応することに注意してください。

あなたの場合、「顧客コントローラーに顧客を作成させる」必要はありません。

たとえば、「GetCustomer」と呼ばれる通常のメソッドを作成するだけです。これは、複数のコントローラーから呼び出すことができます。このメソッドはどこにでも存在する可能性があります-おそらくモデル名前空間のヘルパーアセンブリにあります(モデルが別のクラスライブラリにあると仮定します)。Invoice コントローラーからこれを呼び出すだけです。

コントローラーから前後に移動したくない-これはMVCの原則に反します。

そのはず

URL Request -> Controller -> Model -> Controller -> View.

いいえ

URL Request -> Controller -> Controller -> Model -> Controller -> View.

これが私の言いたいことです。

顧客コントローラー:

public ActionResult Index(int customerId)
{
   var customer = Model.GetCustomerById(customerId);
   return View(customer);
}

請求書管理者:

public ActionResult GetInvoice(int customerId)
{
   var customer = Model.GetCustomerById(customerId);
   return View("Invoice", customer);
}

モデル:

public Customer GetCustomerById(int customerId)
{
    var customer = yourDatabaseRepository.GetCustomerById(customerId);
}

わかる?重要なのは、「GetCustomer」ロジックをコントローラーに配置しないことです-モデルに抽象化します-すべてのコントローラーからアクセスできます。

于 2010-07-12T05:09:56.187 に答える
0

技術的な質問に答える前に、請求書ページの流れについて考えてください。顧客用の一種の検索ボックスが必要だと思います。顧客が見つからない場合は、別のコントローラーに自動的にリダイレクトし、顧客を作成して、請求書ページに戻るように求めています。顧客が見つからなかったことをユーザーに警告し、顧客を作成するオプションを提示する方が適切な場合があります (名前のスペルが間違っている可能性があります)。そうしないと、それぞれに異なる請求書が添付された重複した顧客が浮かんでしまうことになります。

次に、次のようにユーザーをリダイレクトできます (リターン URL と顧客名が含まれていることに注意してください)。顧客コントローラーはこれらのパラメーターを受け入れて、名前フィールドに事前入力し、リダイレクトすることができます。

RedirectToAction("Create", "Customer", new { returnUrl = "YourUrl", NewCustomerName = "NewCustNameHere" }

これを自動的に行いたい場合は、RPM が提案する方法でこれを行います。

于 2010-07-12T16:19:59.323 に答える