MVC:传递参数来查看?

MVC新手问题:

我正在获取go/{mainnav}/{subnav}forms的URL,我已成功路由到GoController类,方法:

 public ActionResult Index(string mainnav, string subnav) { return View(); } 

到现在为止还挺好。 但是现在我希望视图返回不同的HTML,具体取决于mainnav或subnav的值。 具体来说,在javascript块中,我想要包含以下行:

 myobj.mainnav = [value of mainnav parameter]; 

并且, 仅当subnav不为null或为空时

 myobj.subnav = [value of subnav parameter]; 

如何将这些参数传递给没有代码隐藏的aspx页面?

您使用ViewModel类来传输数据:

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

然后你的行动方法出来了

 public ActionResult Index(string mainnav, string subnav) { return View(new IndexViewModel(mainnav, subnav)); } 

这意味着您的视图必须是强类型的:

 <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 

在您的视图中,您输出数据,如下所示:

 myobj.mainnav = <%: Model.MainNav %>; 

如果使用MVC3,另一种解决方案是使用动态ViewBag

 public ActionResult Index(string mainnav, string subnav) { ViewBag.MainNav = mainnav; ViewBag.SubNav = subnav; return View(); } 

这将在页面中访问如下:

 myobj.mainnav = <%: ViewBag.MainNav %>; 

但是,我建议你阅读不引人注目的javascript ,看看你是否可以改进你的设计以避免这个特定的问题。

如果您使用的是MVC3,我建议将值传递给ViewBag

 ViewBag.MainNav = "xxxx"; ViewBag.SubNav = null; 

然后在您的视图页面上,您可以在其中定义JavaScript并添加值。

如果你使用ViewData["MainNav"]你没有MVC 3,那么存储你的值会产生同样的效果。

您是否尝试在视图中访问Request中的参数?

 Request.Params["mainnav"] 

要么

 Request.Params["subnav"] 

适用于MVC

我正在使用以下方法:

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

在主视图中:

 @Html.Partial("_TitleBody" , new XXX.Models.TitleBodyModel("title", "body" )) 

然后在局部视图中:

 @model XXX.Models.TitleBodyModel 
@Model.Title
@Model.Body

如果我明白这可以是一个解决方案:

 public ActionResult Index(string mainnav, string subnav) { return View(mainnav | subnav); } 

在Html视图中,您可以使用View和after

 <%=Model %>