Vra

Ek probeer om te impliment'n persoonlike siening enjin te dien mobiele uitsig wat gebaseer is op die gebruiker agent.Ek is volgende Scott hans elman se benadering van hierdie blog post.

Ek geërf het van die WebFormsViewEngine en geneutraliseer die FindView metode die dieselfde manier dat Scott beskryf in sy blog.

Ek het bygevoeg'n paar lyne om my Globale.asax Application_Start metode om te skoon te maak die uitsig enjin versameling en voeg'n nuwe geval van my oog enjin.

Na'n paar toets dit wil voorkom dat MVC is ignoreer my mening enjin.Wanneer dit versuim het om te vind my persoonlike menings wat gebaseer is op die gebruiker agent van die leser ek toevlug tot hardcoding die persoonlike pad om te voeg aan die lig en dit nog steeds daarin geslaag om terug te val op die standaard te kyk.Ek stel'n breekpunt in my FindView metode en seker genoeg, dit is nie'n beroep op almal.

Hoe kan ek my persoonlike siening enjin te werk?Enige hulp sal baie waardeer word.

My siening enjin lyk soos hierdie:

public class MyViewEngine: WebFormsViewEngine
{
    public override ViewEngineResult FindView (ControllerContext controllerContext, string viewName, string masterName, bool useCache)
    {
         ViewEngineResult result = null;

         //Serve a special view for iPhones
         if (UserAgentIs(controllerContext, "iPhone"))
         {
              result = base.FindView(controllerContext, "Mobile/iPhone/" + viewName, masterName, useCache);
         }

         //If no special view is found, fall back to the default view
         if (result == null || result.View == null)
         {
              result = base.FindView(controllerContext, viewName, masterName, useCache);
         }

         return result;
    }

    private bool UserAgentIs(ControllerContext controllerContext, string userAgentToTest)
    {
         return (controllerContext.HttpContext.Request.UserAgent.IndexOf(userAgentToTest, StringComparison.OrdinalIgnoreCase) > 0);
    }
}

En in my Globale.asax:

protected void Application_Start()
{
    RegisterRoutes(RouteTable.Routes);
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new MyViewEngine());
}

Wanneer dit ingestel het nie werk nie ek het selfs probeer om te vereenvoudig my FindView metode om hierdie:

public override ViewEngineResult FindView (ControllerContext controllerContext, string viewName, string masterName, bool useCache)
    {
         ViewEngineResult result = null;
         result = base.FindView(controllerContext, "Mobile/iPhone/" + viewName, masterName, useCache);
         return result;
    }

En wat nie werk nie.Dit is nog steeds teruggekeer om die standaard te kyk.En ja, die kyk bladsy en meester bladsy wat moet gevind word deur die verklaring nie eintlik bestaan nie.Ek is redelik stumped oor hoekom dit nie werk nie.

Was dit nuttig?

Oplossing

Wel, dit is beslis'n verleentheid word:

Toe ek geskryf het na my mening enjin ek was na aanleiding van die blog post van Scott hans elman (sien my oorspronklike post vir die skakel).Ek delcared my mening enjin klas toe besluit ek sou net kopieer en plak Scott se kode in my klas en verander as dit nodig is.Ek het per ongeluk gekopieer sy kode MET die klas definisie in my klas skep van'n geneste klas.Daarom is my siening enjin het nie eintlik bevat'n ignoreer vir die FindView metode en natuurlik die een in die geneste klas sou nooit genoem word nie!

Die les:wanneer die gebruik van kode gevind aanlyn moenie kopieer en plak!Altyd tipe dit self.

Dankie aan almal wat kyk hierdie vraag uit en probeer om my te help.

Ek sal gaan staan in die hoek van skaamte en verleentheid nou!

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top