部分视图,HTML帮助程序或其他

时间:2012-01-23 09:09:38

标签: asp.net-mvc

我有以下代码填充两个下拉列表,它在一个视图“BeachSearch”中都很有用,但我想在其他一些视图中重复使用它。

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派生的。

2 个答案:

答案 0 :(得分:1)

在视图中(假设BeachSearch方法在HomeController中):

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

在控制器中更改:

public ActionResult BeachSearch()
{
    ...

    return PartialView();
}

该示例使用asp.net MVC3和剃刀视图

答案 1 :(得分:1)

首先,您需要使用[ChildAction]修饰BeachSearch操作并返回部分视图,如下所示

[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");}

注意: - 您无需对视图进行任何更改。只需在要渲染局部视图的位置使用上面的代码即可。