2012-01-23 10 views
1

2つのドロップダウンリストを作成する次のコードは1つのビュー "BeachSearch"でうまくいきますが、他の多くのビューで再利用したいと思います。パーシャルビュー、HTMLヘルパーなど

public ActionResult BeachSearch() 
{ 
    var db = new PeninsulaGuideEntities(); 

    //Populate Coastline Dropdown 
    var coastlines = db.CoastLines.Select(c => new { c.CoastLineID, c.CoastLineName }); 
    ViewBag.CoastLineId = new SelectList(coastlines.AsEnumerable(), "CoastLineID", "CoastLineName", 0); 

    //Populate Town Dropdown 
    var towns = (from bf in db.Towns 
        join f in db.Beaches on bf.TownID equals f.TownFK 
        select new 
        { 
         bf.TownID, 
         bf.TownName 
        }).Distinct(); 

    ViewBag.TownId = new SelectList(towns.AsEnumerable(), "TownID", "TownName", 0); 

    return View(); 
} 

パーシャルビューやHTMLヘルパーなど、このコードを再利用するにはどうすればよいですか?もしそうなら、どこのファイル構造にファイルを置くべきですか?それを使用するすべてのビューは私のHomeControllerから派生していることを覚えておいてください。鑑み

答えて

1

(BeachSearch方法はにHomeControllerにあると仮定):コントローラ変化

<h2>Beaches</h2> 
    @Html.Action("BeachSearch", "Home") 

これ:

public ActionResult BeachSearch() 
{ 
    ... 

    return PartialView(); 
} 

サンプルはasp.netのMVC3とカミソリビューを使用

+0

ありがとうエドゥアルド、それは完全に働いた。サンプルがカミソリに入っていたと言わせていただきました。私はそれがわかっていましたが、MVC2と3を扱うときには少し混乱があります。 –

1

まず、[ChildAction]でBeachSearchアクションをデコレートし、foのような部分的なビューを返す必要がありますllowing今

[ChildActionOnly] 
public ActionResult BeachSearch() 
{ 
    var db = new PeninsulaGuideEntities(); 

    //Populate Coastline Dropdown 
    var coastlines = db.CoastLines.Select(c => new { c.CoastLineID, c.CoastLineName }); 
    ViewBag.CoastLineId = new SelectList(coastlines.AsEnumerable(), "CoastLineID", "CoastLineName", 0); 

    //Populate Town Dropdown 
    var towns = (from bf in db.Towns 
       join f in db.Beaches on bf.TownID equals f.TownFK 
       select new 
       { 
        bf.TownID, 
        bf.TownName 
       }).Distinct(); 

    ViewBag.TownId = new SelectList(towns.AsEnumerable(), "TownID", "TownName", 0); 

    return PartialView(); 
} 

、あなたはこのアクションメソッドをレンダリングしたいところはどこでも、次のコード

@{Html.RenderAction("TextForAction", "BeachSearch", "Controller");} 

使用: - あなたはあなたのビューを変更する必要はありませんが。パーシャルビューをレンダリングする場所で上記のコードを使用してください。

+0

こんにちはPankaj、私はあなたに何かに頭を与えたので、私はあなたに+1を与えた、なぜ我々はメソッドにChildActionOnlyフィルタを追加する必要がありますか? –

+0

ChildActionOnly属性は、アクションメソッドがメインビュー内でのみ使用できることを指定します。全体ビューを含めるのではなく、部分的な応答をUIに挿入するためにPartialViewを返します。したがって、あなたのビューを強化するために使用できますが、スタンドアロンのMVCアクションとしてこれを使用することはできません –

+0

ありがとうPankaj、歓声、 –

関連する問題