2011-01-27 8 views
12

MVCの初心者の質問:MVC:パラメータを渡して表示しますか?

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

これまでのところ、とても良い:

は私が成功しGoControllerクラス、メソッドにルーティングされてきたフォームgo/{mainnav}/{subnav}のURLを拾っています。しかし、今私はmainnavまたはsubnavの値に応じて、別のHTMLを返すビューをしたい。 subnavがnullまたは空でない場合にのみ

myobj.mainnav = [value of mainnav parameter]; 

と、:具体的には、ジャバスクリプトブロック内で、私はラインを含める

myobj.subnav = [value of subnav parameter]; 

あなたは、ASPXにそれらのパラメータを渡すにはどうすればよいですコードビハインドを持たないページ?

+1

Request.Params["subnav"] 

作品:あなたはaspxページまたはMVC1またはMVC2またはmvc3またはmvc4内の溶液を知りたいですか? –

答えて

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

私は理解していれば、これは解決策になることができます:あなたが見る を使用することができますし、MVC3を使用している場合

<%=Model %> 
+0

?コンパイルしない... |演算子は文字列には適用されません –

+0

申し訳ありませんが、理解が間違って、私はあなたが2つの文字列の1つを使用することができます...選択肢はあなたが何をしたいかをanalizingしていることを意味する(申し訳ありませんが、悪い英語、 )。 –

+0

彼は両方の*文字列をビューに同時に渡したいと思っています*、あなたの解決策を不十分にします。 –

3

後、私はに値を渡すことを示唆しているのHTMLビューで

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

ViewBag

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

JavaScriptを定義して値を追加するビューページでは、

ViewData["MainNav"]を使用するとMVC 3を持っていない場合は、値を保存すると同じ効果があります。

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"] 

またはMVC dot.net @

+0

あなたがこれを行うことができますので、あなたがするべきではありません。要求に問い合わせて、ビューに渡すデータを収集するのはコントローラの役割です。コントローラは、そのデータをどこに送信するかを決定する必要があります。あなたのソリッドな原則の人々を覚えています。 –

関連する問題