2

カスタム ヘッダー (顧客 ID に基づく) とサイド メニュー (顧客 ID に基づく) + メイン コンテンツをレンダリングする方法を知りたいです。

検索ページに顧客のリストがあります。顧客を選択すると、その顧客の ID (/controller/action/id) を渡す別のページに移動します。ただし、この新しいページでは、ヘッダー (名前、メールアドレス、電話番号など) に顧客の詳細を一覧表示したいと思います。サイド メニューには、この顧客が所有するペット (犬 1、猫 2 など) を一覧表示したいと思います。メイン コンテンツでは、リスト (サイド メニュー) の最初のペットの詳細を表示したいと考えています。サイド メニューのペットのリストはリンクにする必要があります。たとえば、dog1 は、メイン コンテンツに表示される独自の詳細へのリンクである必要があります。Cat2 は、メイン コンテンツなどの詳細を表示するためのリンクである必要があります。

ID をヘッダー、サイド メニュー、コンテンツ ページに一度に渡す方法がわかりません。

左側のメニューにジャンルのリストがある mvcMusicStore を見てきましたが、それは変わりません! 私の場合、前のページで選択したお客様に合わせてサイドメニューが変わるはずです!わかる?

4

2 に答える 2

2

複数の選択肢があります。最初は、部分ビューを使用できます。

in layout.cshtml [or in your usecase, search page]:
@Html.Partial(your-partial-view-name)
view: headerPartial.cshtml as an example:
@if(User.Identity.IsAuthenticated) {
    <span>Welcome</span> @User.Identity.Name
} else {
    <span>Login or Register</span>
}

これが基本ロジックです。あなたの状況では、このようなものが必要です。ただし、データベースなどからデータをロードする必要がある場合は、部分アクションを使用することをお勧めします。

// in layout or search or any page you want to render partial views:
// For example you have a controller named MyPartials:
// Put this line where you want to render header:
@Html.Action("HeaderInfo", "MyPartials")

およびアクション:

public class MyPartialsController : Controller {
    public ActionResult HeaderInfo() {
        var model = retrive header needed info from db
        return Partial(model);
    }
}

良い解決策を提案するために、問題の詳細をお知らせください

アップデート:

仮定する:

コントローラ:CustomerController

アクション:SeletedCustomer

解決:

1. モデル:

public class HeaderInfoModel { } // contains header data: name, email, phone, etc

public class SideInfoModel { } // dog1, cat2, etc

public class MainContentModel { } // holding main content data

// bringing all together
public class CustomerModel {
    public HeaderInfoModel HeaderInfo { get; set; }
    public SideInfoModel SideInfo { get; set; }
    public MainContentModel MainContent { get; set; }
}

2.コントローラー

public class CustomerController : Controller {
    public ActionResult SeletedCustomer(int id) {
        // use id and retrieve data you want, from db or anywhere else you want
        var model = new CustomerModel {
            HeaderInfo = SomeMethodToFetchHeaderData(id),
            SideInfo = SomeMethodToFetchSideData(id),
            MainContent = SomeMethodToFetchMainContent(id)
        };
        return View(model);
    }
}

3. メイン ビュー:Customer/SeletedCustomer.cshtml

@model CustomerModel 

<div id="header">
    <!-- put this where you want to render header -->
    @Html.DisplayFor(model => model.HeaderInfo)
</div>

<div id="side">
    <!-- put this where you want to render side -->
    @Html.DisplayFor(model => model.SideInfo)
</div>

<div id="main">
    <!-- put this where you want to render main content -->
    @Html.DisplayFor(model => model.MainContent)
</div>

4.あなたの状況では、表示テンプレートを使用するのが最も簡単な方法です。または. DisplayTemplates_ ~/Views/Customer/_ ~/Views/Shared提供されたモデルをどこでどのように使用するかによって異なります。繰り返しますが、あなたの場合、これを作成することをお勧めします: ~/Views/Customer/DisplayTemplates/. 次に、そのフォルダーにいくつかのビューを追加します。以下で説明します。

4.1. HeaderInfoModel.cshtmlで作成~/Views/Customer/DisplayTemplates/:

@model HeaderInfoModel

<div>
    implement your model presentation, I mean, show the data how you want
</div>

4.2. SideInfoModel.cshtmlで作成~/Views/Customer/DisplayTemplates/:

@model SideInfoModel

<div>
    implement your model presentation, I mean, show the data how you want
</div>

4.3. MainContentModel.cshtmlで作成~/Views/Customer/DisplayTemplates/:

@model MainContentModel

<div>
    implement your model presentation, I mean, show the data how you want
</div>

それだ。終わり!あなたの状況では、私が提案できる最善の方法はそれです。ただし、複数の選択肢があります。それはあなたのプロジェクトに完全に依存しています。

于 2013-05-31T10:18:08.690 に答える
0

おそらく、かみそりの内部で以下に示すような条件で、ある種の部分ビューを使用する必要があります

if(this is correct page && CustomerID is available) { show the view }

ViewBag でパラメータを渡し、ビュー内で使用できます。ASP.NET MVC を初めて使用する場合は、すばらしいチュートリアルhttp://www.asp.net/mvcをご覧ください。

そして、初心者向けの部分ビューhttp://mvc4beginner.com/Tutorial/MVC-Partial-Views.htmlを構築するチュートリアルがあります。

お役に立てれば

于 2013-05-31T09:59:04.393 に答える