2011-01-27 34 views
12

MVC的新手问题:MVC:传递参数来查看?

我拿起形式go/{mainnav}/{subnav},我已经成功地路由到GoController类,方法的URL:

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

到目前为止,一切都很好。但现在我希望视图返回不同的HTML,具体取决于mainnav或subnav的值。具体来说,一个JavaScript块里面,我想包括行:

myobj.mainnav = [value of mainnav parameter]; 

,并只有subnav不为空或空

myobj.subnav = [value of subnav parameter]; 

如何传递这些参数,一个aspx没有隐藏代码的页面?

+1

@ dot.net:你想知道在aspx页面或MVC1或MVC2或MVC3或mvc4解决? – 2013-08-24 04:52:10

回答

26

您使用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<YourNameSpace.IndexViewModel>" %> 

在你看来,你输出的数据是这样的:

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

不过,我想建议您阅读unobtrusive javascript并查看是否可以改进设计以避免此特定问题。

0

如果我理解这可能是一个解决办法:

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

在HTML视图,您可以使用浏览 后

<%=Model %> 
+0

?不会编译... |运算符不适用于字符串 – 2011-01-27 13:33:12

+0

没有抱歉,错过理解,我的意思是说,你可以使用两个字符串中的一个...选择是由你自己决定你想做什么(对不起,英语不好,我是意大利人)。 – 2011-01-27 13:37:01

3

如果您正在使用MVC3我建议传递值成ViewBag

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

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

如果您没有MVC 3如果您使用ViewData["MainNav"]),存储您的值具有相同的效果。

1

我使用以下方法:

ViewModel。类:

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 


<div class="bl_item"> 
    <div class="bl_title">@Model.Title</div> 

    <div class="bl_body">@Model.Body</div> 
</div> 
2

你尝试从请求在您的视图访问参数?

Request.Params["mainnav"] 

Request.Params["subnav"] 

作品在MVC