2

私はこれについて髪を引っ張っていて、自分のアプローチをごまかし始める前にガイダンスを探しています.

これが私が持っているものです:

スニペットを表示

<td>@Html.ActionLink("More Details", "Index", new { id = product.ProductId })</td>
<td>@Html.ActionLink("Compare", "Compare", new { id = product.ProductId, compare = true })</td>

コントローラーのスニペット

public ActionResult Index(FormCollection values)
{
    // Does stuff, works
}

public ActionResult Index(int productId)
{
    // Does stuff, works
}

さて、ここに私の問題があります。インデックス機能は、POST からフォームへの両方で取得され、[詳細] ActionLink がクリックされます。これはうまくいきます。

ここで、「比較」を機能させたいと思います。同じページに表示し、比較した製品のリストを保持します。これで問題ありません。しかし、同じビュー/ページでその比較機能を取得するにはどうすればよいですか?!

私はもう試した:

public ActionResult Compare(int productId)
{

}

しかし、Compare.cshtml が必要なため、明らかにうまくいきません。ViewModel を変更して、新しく比較した製品で返すようにしたいので、元のビューからこれを行うことができます。

@foreach(var products in Model.ComparedProducts)

私がこれをしているのを見ることができる唯一の方法は、「それをごまかす」ことです:

public ActionResult Index(int productId = 0, bool compare)
{

}

同じページに多くの機能があると、手に負えなくなる可能性があります.

ここで私が見逃している明らかな何かがありますか?

ああ、AjaxLink オプションは私には適していません。これは、ポストバック (Progress Enhancement とすべてのジャズ) を介して動作する必要があるサイトの一部であるためです。

4

2 に答える 2

9

を呼び出して ActionResult を返すと思いますが、そうreturn View(model)ですか? ビューに明示的に名前を付けずに、MVC 解決メカニズムは、アクションと同じ名前のビュー (この場合は「Compare.cshtml」) を探します。

呼び出しを変更するとreturn View("Index", model)、アクション名に関係なく Index.cshtml ビューが使用されます。

それはあなたが探していたものですか?

于 2012-11-23T10:11:26.373 に答える
5

MVC のアクションには、対応するビューは必要ありません。関数に名前パラメーターを指定することで、任意のビューを返すことができView()ます - http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.view%28v=vs.98%29.aspxを参照してください詳細については。

比較関数で必要なすべてのロジックを実行し、必要に応じて を使用して index アクションまたはページを表示するその他のアクションにリダイレクトできますRedirectToAction()

于 2012-11-23T10:11:11.090 に答える