При написании мини форума возникла проблема с генерацией ссылок при постраничной разбивке.
У меня есть 2 метода
Первый отвечает за показ форумов и топиков форума
[Route("{forumName}", Name = "showForum", Order = 6)]
[Route("{forumName}/Page/{page}", Order = 5)]
[OutputCache(Duration = 30, VaryByParam = "forumName;page", Location = OutputCacheLocation.ServerAndClient)]
public async Task<ActionResult> ShowForum(string forumName, int page = 1)
Второй, для отображение темы
[HttpGet]
[RefreshDetectFilter]
[Block(VisibleBlock = false)]
[Route("{forum}/{topicName}", Name = "showTopic", Order = 8)]
[Route("{forum}/{topicName}/Page/{page}", Order = 7)]
[OutputCache(Duration = 30, VaryByParam = "topicName;page", Location = OutputCacheLocation.ServerAndClient)]
public async Task<ActionResult> ShowTopic(string forum, string topicName, int page = 1)
Вюшка отображения форума
<section id="forums">
<h1>@Model.CurrentForumName</h1>
<div class="breadcrumb">
@Html.MvcSiteMap().SiteMapPath()
</div>
<div class="form-group">
@Html.ActionLink(L("Forums", "ADD_NEW_TOPIC"), "NewTopic", new { forum = Model.CurrentForumTranslite }, new { @class = "btn btn-primary" })
</div>
@if (Model.IsHaveForums)
{
<div class="panel panel-forum">
<div class="panel-heading">
<h3 class="panel-title">@L("Forums", "FORUMS")</h3>
</div>
<div class="panel-body">
<ul class="forum-list list-reset">
@if (Model.IsHaveForums)
{
foreach (var forum in Model.Forums)
{
@Html.Partial("Partial/ForumItem", forum)
}
}
else
{
@Html.Partial("Partial/EmtyCategory")
}
</ul>
</div>
</div>
}
<div class="panel panel-forum">
<div class="panel-heading">
<h3 class="panel-title">@L("Forums", "TOPICS")</h3>
</div>
<div class="panel-body">
<ol class="forum-list list-reset">
@if (Model.IsHaveTopics)
{
foreach (var topic in Model.Topics)
{
@Html.Partial("Partial/TopItem", topic)
}
}
else
{
@Html.Partial("Partial/EmtyCategory")
}
</ol>
</div>
@if (Model.Topics.HasNextPage || Model.Topics.HasPreviousPage)
{
<div class="panel-footer">
<div class="align-right">
<ul class="pagination">
@Html.Pager(Model.Topics.PageSize, Model.Topics.PageIndex, Model.Topics.TotalItemCount)
</ul>
</div>
</div>
}
</div>
</section>
А также представление блока списка под форумов
<li class="row row-eq-height">
<div class="col-md-1">
<i class="status-icon @Model.Icon" data-icon data-read="@Model.IsRead"></i>
</div>
<div class="col-md-4">
<h4 class="forum-item-title">
<a href="@Url.Action("ShowForum", "Forums", new {forumName = Model.NameTranslit})" title="@Model.Name">@Model.Name</a>
</h4>
@if (Model.SubForums.Any())
{
<ul class="main-sublist list-reset">
@foreach (var subForum in Model.SubForums)
{
@Html.Partial("Partial/SubForumItem", subForum)
}
</ul>
}
</div>
<div class="col-md-2">
<div class="forum-statistic">
<strong>@Model.TotalTopicCount</strong>
<span>@L("Forums", "TOTAL_TOPICS")</span>
</div>
</div>
<div class="col-md-2">
<div class="forum-statistic">
<strong>@Model.TotalPostCount</strong>
<span>@L("Forums", "TOTAL_POSTS")</span>
</div>
</div>
<div class="col-md-3">
@if (!string.IsNullOrEmpty(Model.LastUserNamePost))
{
<ul class="list-reset last-update">
<li>
<strong>@L("FORUMS", "THEMA")</strong>
<a href="@Url.Action("GotToLastPost", "Forums", new { forumName = Model.NameTranslit, topicName = Model.LastTopicTitleTranslite })">@Model.LastTopicTitle</a>
</li>
<li>
<strong>@L("FORUMS", "AUTHOR")</strong>
<a href="@Url.Action("Details", "Users", new { userName = Model.LastUserNamePost })">@Model.LastUserNamePost</a>
</li>
<li><span>@Model.LastDatePost.Value.ToString("dd.MM.yyyy, HH:mm")</span></li>
</ul>
}
else
{
<div class="empty-last-update">
@L("FORUMS", "EMPTY_LAST_UPDATE")
</div>
}
</div>
</li>
и тем
<li class="row row-eq-height">
<div class="col-md-1">
<i class="status-icon fa fa-file-text" data-read="@Model.IsRead"></i>
</div>
<div class="col-md-4">
<h4 class="forum-item-title">
<a href="@Url.RouteUrl("showTopic", new { forum = Model.CurrentForumTranslite, topicName = Model.TitleTranslite })" title="@Model.Title">@Model.Title</a>
</h4>
</div>
<div class="col-md-2">
<div class="forum-statistic">
<strong>@Model.AnswerCount</strong>
<span>@L("Forums", "TOTAL_POSTS")</span>
</div>
</div>
<div class="col-md-2">
<div class="forum-statistic">
<strong>@Model.ViewCount</strong>
<span>@L("Forums", "TOTAL_VIEW_TOPIC")</span>
</div>
</div>
<div class="col-md-3">
@if (!string.IsNullOrEmpty(Model.LastPostUserName))
{
<ul class="list-reset last-update">
<li>
<strong>@L("FORUMS", "THEMA")</strong>
<a href="@Url.Action("GotToLastPost", "Forums", new { forumName = Model.CurrentForumTranslite, topicName = Model.TitleTranslite })">@L("Forums", "GO_TO_LAST_POST")</a>
</li>
<li>
<strong>@L("FORUMS", "AUTHOR")</strong>
<a href="@Url.Action("Details", "Users", new { userName = Model.LastPostUserName })">@Model.LastPostUserName</a>
</li>
<li><span>@Model.DateLastAnswer.Value.ToString("dd.MM.yyyy, HH:mm")</span></li>
</ul>
}
else
{
<div class="empty-last-update">
@L("FORUMS", "TOPIC_EMPTY_LAST_UPDATE")
</div>
}
</div>
</li>
Так вот до того как я начал использовать
Url.RouteUrl у меня была проблема возникала с отображением ссылки на топик когда переходишь на следующую страницу пр разбивки
Например:
При нахождении на странице форума
/Forums/Predloghenie/Page/2
Ссылка на тему генерировалась вот так
/Forums/Predloghenie/Testovayu_tema/Page/2
Тоже касается при генерации breadcrumb используя функцию Html.MvcSiteMap().SiteMapPath() от MvcSiteMapProvider ссылка на родительский форм получается вот так:
/Forums/Kategoriyu_1/Page/2
Для ссылок на топик я нашел решение, это использовать
Url.RouteUrl, но вот как быть с breadcrumb я не знаю. Может есть универсальный способ решить данную проблему?