Частичное представление, HTML Helper или другое - PullRequest
1 голос
/ 23 января 2012

У меня есть следующий код, который заполняет два выпадающих списка, все это прекрасно работает в одном представлении «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 ]

1 голос
/ 23 января 2012

Прежде всего, вам нужно украсить действие BeachSearch с помощью [ChildAction] и вернуть частичное представление, как показано ниже

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

ПРИМЕЧАНИЕ : - Вам не нужно вносить никаких изменений в свой вид. Просто используйте приведенный выше код в местах, где вы хотите сделать частичное представление.

1 голос
/ 23 января 2012

В представлении (при условии, что метод BeachSearch находится в HomeController):

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

В контроллере измените это:

public ActionResult BeachSearch()
{
    ...

    return PartialView();
}

Пример использует asp.netMVC3 и бритва

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...