Redirect to controller (but with a different master) using a catchall wildcard

后端 未结 6 2078
故里飘歌
故里飘歌 2021-01-01 06:16

I have a problem whereby I want to display a view differently (a different master page), depending on where it came from, but don\'t know where to start...

I have se

相关标签:
6条回答
  • 2021-01-01 06:42

    I had same issue

    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";
            }
        }
    }
    

    Then just ensure all the views inherit from FriViewPage instead of ViewPage

    0 讨论(0)
  • 2021-01-01 06:47

    Acutally the MasterPageFile getter never appears to be called

    0 讨论(0)
  • 2021-01-01 06:51

    You can change the MasterPage by modifying the ViewResult prior to rendering. For example, a controller action could do:

    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;
    }
    

    You could accomplish the same thing with an action filter for a more generic solution.

    0 讨论(0)
  • 2021-01-01 06:54

    It may be the devils work but you could put some code in the Partner View's codebehind to look at the URL and then set the master page programmatically in there?

    0 讨论(0)
  • 2021-01-01 06:54

    I'm not sure how you can programatically alter the master page, as I've never done that, but I'm sure it's possible (it's probably just a property on Page).

    That might be worth asking as another question.

    0 讨论(0)
  • 2021-01-01 07:01

    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.

    0 讨论(0)
提交回复
热议问题