2010-03-11 3 views
1

Voici donc l'affaireASP.NET MVC Programmation

Je travaille sur un projet que j'avais initialement mis l'accent sur Zend Framework, mais maintenant je veux entrer dans ASP.NET MVC et le garçon laisse la parole juste il est bon et un bon début mais j'en suis encore au début. Mais j'ai des problèmes avec la transmission de données de mon contrôleur à la page principale/mise en page. Maintenant, dans Zend, je suis capable de déterminer quel contrôleur et quelle action je suis dans un assistant que j'ai créé. Maintenant, je veux mettre en œuvre la même fonctionnalité dans cette application ASP.NET MVC. Donc, ma page de mise en page maîtresse connaît le contrôleur dans lequel je suis et, par conséquent, la navigation de haut niveau. J'utilise un droit html li linéaire une navigation de structure.

Toute aide sur ce sujet spécifique serait grandement appréciée.

Répondre

0

Vous pouvez jeter un oeil à certaines des vidéos publiées sur le site ASP.Net. Il y a des tutoriels et des screencasts démontrant les techniques que vous demandez. http://www.asp.net/mvc

2

Bienvenue sur asp.net mvc ... Je gère ce scénario 1 de 2 façons:

1) Je mis une ligne de code en haut de ma page principale qui obtient le courant l'action appelée:

<% string action = ViewContext.RouteData.Values["action"].ToString(); %> 

Ensuite, vous pouvez faire une vérification sur vos liens de navigation et ajouter une classe, le cas échéant:

<% if (action == "Home") { Response.Write(" class='current'"); }%> 

2) J'envoie une chaîne avec chaque vue et l'attacher à la balise body en tant que classe dans mon Maître Page:

public ActionResult Home() 
{ 
    ViewData["BodyClass"] = "home"; 

    return View(); 
} 


<body class="<%= (string)ViewData["BodyClass"] %>"> 

Ensuite, dans votre css vous pouvez faire quelque chose comme:

.home #nav li a { 
    /* something different */ 
} 

Espérons que cela aide.

+0

J'aime la deuxième approche. –

+0

Je ne peux pas imaginer utiliser cette technique pour un site énorme. –

+0

Avez-vous voté cette réponse parce que vous "ne pouvez pas imaginer l'utiliser dans un site énorme?" –

0

Si vous voulez transmettre des données à votre masterpage, je suggère ce qui suit:

Créer une classe de base viewmodel, par exemple

public class ViewModelBase 
{ 
    public List<MenuItem> MenuItems { get; set; } 
    public string SomeRandomData { get; set; } 
} 

modifier 1er rang de masterpage

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<ViewModelBase>" %> 

Pour chaque page créer viewmodels, par exemple

public class TestViewModel : ViewModelBase 
{ 
    public string Message { get; set; } 
} 

Controller exemple

public class TestController : Controller 
{ 
    public ActionResult Index() 
    { 
     TestViewModel model = new TestViewModel(); 
     // passing selected menuitem as parameter 
     model.MenuItems = createMenuItems("test"); 
     model.Message = "Hello World!"; 
     return View(model); 
    } 
    private List<MenuItem> createMenuItems(string selected) 
    { 
     // ... 
    } 
} 

1er rang de ViewPage

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<TestViewModel>" %> 

Vous pouvez maintenant accéder ViewModelBase de masterpage et TestViewModel de ViewPage :)

Ajouter

<add namespace="yourproject.Models"/> 

dans la section 'namespaces' de web.config afin de ne pas avoir à taper l'instruction import sur chaque page d'affichage.