2011-01-27 37 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