3

ビューの表示元に応じてビューを別の方法で表示したい (別のマスター ページ) という問題がありますが、どこから始めればよいかわかりません...

さまざまな構造を含むさまざまな種類の URL をキャッチするルートがいくつかあります。

以下のコード スニペットには、製品ルートがあり、製品ページにも移動できるパートナー サイト ルートがあります。私たち自身のデフォルトのスタイリング。products/cola.htmにアクセスするとします。これは、 partners/pepsi/products/cola.htm と同じ URL に移動する必要があり、PartnerRedirect は、URL ワイルドカード (この場合は「products/cola.htm」) を変換することにより、ワイルドカードに基づいて URL を処理できます。 ) をコントローラー アクションに挿入し、ユーザーを転送します (ただし、ビュー内のマスター ページを変更するだけです)。

routes.MapRoute(
    "Product",
    "products/{product}.htm",
    new { controller = "Product", action = "ShowProduct" }
);

routes.MapRoute(
    "ProductReview",
    "products/{product}/reviews.htm",
    new { controller = "Product", action = "ShowProductReview" }
);

routes.MapRoute(
    "Partner",
    "partners/{partner}/{*wildcard}",
    new { controller = "Partners", action = "PartnerRedirect" }
);

これは可能ですか?もしそうなら、どのように?

よろしくお願いします。

4

6 に答える 6

1

同じ問題がありました

public class FriViewPage : ViewPage
{
    public override string MasterPageFile
    {
        get
        {
            return "~/Views/Shared/Site.Master"; // base.MasterPageFile;
        }
        set
        {
            if (ViewData["agent"].ToString() == "steve")
                base.MasterPageFile = "~/Views/Shared/Site.Master";
            else
                base.MasterPageFile = "~/Views/Shared/Site2.Master";
        }
    }
}

次に、すべてのビューが ViewPage ではなく FriViewPage から継承されるようにします。

于 2008-12-12T10:33:43.963 に答える
1

In your partners controller why don't you set a cookie that indicates which partner you want to show, and then redirects to the wildcard section of the route. That way you can show the same partner layout for all subsequent page views.

I don't know if this is what you're looking for, but it might be an option.

于 2008-10-27T03:42:26.943 に答える
0

マスター ページをプログラムで変更する方法は、私は行ったことがないのでわかりませんが、可能であると確信しています (おそらく、Page のプロパティにすぎません)。

それは別の質問として尋ねる価値があるかもしれません。

于 2008-10-27T14:15:24.420 に答える
0

実際には、MasterPageFile ゲッターが呼び出されることはありません

于 2008-12-12T10:35:06.817 に答える
0

レンダリングの前に ViewResult を変更することで、MasterPage を変更できます。たとえば、コントローラー アクションは次のようになります。

public ActionResult TestMP(int? id)
{
    ViewData["Title"] = "MasterPage Test Page";
    ViewData["Message"] = "Welcome to ASP.NET MVC!";
    ViewResult result = View("Index");
    if (id.HasValue)
    {
        result.MasterName = "Site2";
    }
    return result;
}

より一般的なソリューションのアクション フィルターを使用して、同じことを達成できます。

于 2008-12-13T02:49:51.377 に答える
0

それは悪魔の仕事かもしれませんが、パートナー ビューのコード ビハインドにコードを挿入して URL を確認し、そこにプログラムでマスター ページを設定することはできますか?

于 2008-10-27T08:57:40.707 に答える