我有以下代码填充两个下拉列表,它在一个视图“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派生的。
答案 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");}
注意: - 您无需对视图进行任何更改。只需在要渲染局部视图的位置使用上面的代码即可。