Строго типизированная частичная навигация - PullRequest
0 голосов
/ 20 декабря 2010

По сути, я начал работать над этим приложением, ничего не зная о веб-разработке, которая сильно мешает моему поиску. Вероятно, следует прочитать книгу, но это маловероятно. Используя ASP.NET MVC3 RC2, я пытаюсь создать строго типизированное частичное представление, которое может переходить к связанным элементам, а также поддерживать след от крошки хлеба (который, как я думал, будет списком в ViewBag?). Хорошей аналогией была бы страница словаря с вложенным представлением тезауруса.

class Entry
{
   string Name;
   string Definition;
   IEnumerable<Entry> Synonyms;
}

В первую очередь на странице отображается слово и его определение, и т. Д. Но есть div с синонимами, который вы можете щелкнуть, чтобы увидеть синонимы выбранного слова, заменив их w / ajax.

Сначала я думал, что мне нужно сделать помощник по html, но потом я увидел кое-что о возвращении PartialView из моего контроллера, что выглядит намного лучше.

У меня проблемы со сборкой всех кусочков головоломки. Образец или схема были бы великолепны.

Спасибо!

1 Ответ

1 голос
/ 20 декабря 2010

Человек, я знал, что должен был поработать над этим немного дольше, прежде чем спрашивать.

Итак, вот рецепт:

  1. Создайте функцию в контроллере, Synonym(id) { return PartialView(GetEntry(id)); }
  2. Создайте частичное представление, Synonym.cshtml, строго типизированное для Entry.
  3. Отображение частичного представления на главном экране с помощью <div id="Synonyms">@{Html.RenderAction("Synonym", @Model.Id);}</div>
  4. Для ajaxнавигационная ссылка внутри Synonym.cshtml, используйте что-то вроде этого

    @foreach(Entry syn in @Model.Synonyms)
        @Ajax.ActionLink((string)@syn.Name, "Synonym", 
            new { id = @syn.Id }, new AjaxOptions { UpdateTargetId = "Synonyms" })
    

Одна вещь, которая меня кратко смутила, была new { id = @syn.Id }, потому что имя параметра в моем контроллере было на самом деле числом, япришлось использовать new { number = ... }

ах, и я спросил про навигацию.Я думаю, что кнопки «Назад» браузера будет достаточно для большей части навигации, но все же нужна была ссылка «Вернуться к текущему слову».Для этого я сделал следующее:

  1. Модифицированный Controller.Synonym для получения другого параметра, int orig и установите ViewBag.OrigId = orig; перед возвратом.
  2. Изменил ActionLinks, чтобы сказать new { id = @syn.Id, orig = @ViewBag.OrigId }
  3. Создана обратная ссылка внутри Synonym.cshtml - @Ajax.ActionLink("Back To Current Word", "Synonym", new { id = @ViewBag.OrigId, orig = @ViewBag.OrigId }, new AjaxOptions { UpdateTargetId = "Synonyms" })
  4. Изменен вызов на @Html.RenderAction для передачи объекта, как в ActionLinks new { id = @Model.Id, orig = @Model.Id }

Если кто-то придумает лучший ответ, который заставит меня захотеть переписать мои материалы, я приму их.И мне очень хотелось бы узнать, пропустил ли я что-нибудь, например, как я могу избежать второго параметра Controller.Synonym или других упрощений или улучшений.

...