MVC newbie question:
Je récupère une URL de la forme go/{mainnav}/{subnav}
, que j'ai correctement routée vers la classe GoController
, méthode:
public ActionResult Index(string mainnav, string subnav) {
return View();
}
Jusqu'ici tout va bien. Mais maintenant, je souhaite que la vue renvoie un code HTML différent, en fonction des valeurs mainnav ou subnav. Spécifiquement, dans un bloc javascript, je veux inclure la ligne:
myobj.mainnav = [value of mainnav parameter];
et uniquement si subnav n'est ni nul ni vide:
myobj.subnav = [value of subnav parameter];
Comment passez-vous ces paramètres à une page aspx qui n'a pas de code-behind?
Vous utilisez une classe ViewModel
pour transférer les données:
public class IndexViewModel
{
public string MainNav { get; set; }
public string SubNav { get; set; }
public IndexViewModel(string mainnav, string subnav)
{
this.MainNav = mainnav;
this.SubNav = subnav;
}
}
Votre méthode d'action sort alors
public ActionResult Index(string mainnav, string subnav)
{
return View(new IndexViewModel(mainnav, subnav));
}
Cela signifie que votre vue doit être fortement typée:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<YourNameSpace.IndexViewModel>" %>
Dans votre vue, vous sortez les données comme suit:
myobj.mainnav = <%: Model.MainNav %>;
Une solution alternative si vous utilisez MVC3 serait d’utiliser la variable dynamique ViewBag
:
public ActionResult Index(string mainnav, string subnav)
{
ViewBag.MainNav = mainnav;
ViewBag.SubNav = subnav;
return View();
}
qui serait accessible dans la page comme suit:
myobj.mainnav = <%: ViewBag.MainNav %>;
Cependant, je vous recommanderais de lire sur (JavaScript discret) et de voir si vous pouvez améliorer votre conception pour éviter ce problème spécifique.
Si vous utilisez MVC3, je vous suggèrerais de passer les valeurs dans la variable ViewBag
.
ViewBag.MainNav = "xxxx";
ViewBag.SubNav = null;
puis sur votre page d'affichage, où vous définissez le JavaScript et ajoutez la valeur.
si vous n'avez pas MVC 3 si vous utilisez ViewData["MainNav"]
), stocker votre valeur a le même effet.
Avez-vous essayé d'accéder aux paramètres à partir de Request selon vous?
c'est à dire.
Request.Params["mainnav"]
ou
Request.Params["subnav"]
Fonctionne dans MVC
j'utilise l'approche suivante:
ViewModel.class:
public class TitleBodyModel
{
public string Title { get; set; }
public string Body { get; set; }
public TitleBodyModel() { Title = Body = ""; }
public TitleBodyModel(string t, string b) { this.Title = t; this.Body = b; }
}
Dans la vue principale:
@Html.Partial("_TitleBody" , new XXX.Models.TitleBodyModel("title", "body" ))
Puis dans une vue partielle:
@model XXX.Models.TitleBodyModel
<div class="bl_item">
<div class="bl_title">@Model.Title</div>
<div class="bl_body">@Model.Body</div>
</div>
Si je comprends cela peut être une solution:
public ActionResult Index(string mainnav, string subnav)
{
return View(mainnav | subnav);
}
Dans la vue HTML, vous pouvez utiliser Vue Et après.
<%=Model %>