我有一个局部视图(ascx),用于显示个人RSS订阅的前x篇文章:
此外,我有一个方法,它接受一个 RSS URL,并返回类型为 Article 的 IEnumerable。
在我的一个视图中,我这样调用局部视图:
问题在于我想将错误消息显示到主视图中。仅因无法检索到RSS源而不应该对用户造成如此大的干扰,以至于将其抛弃到完整的错误页面。
解决方法:
部分视图和ArticleFeedHelper保持不变。
使用 Dave's的建议,主视图已更改为:
添加了一个部分控制器:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Models.Article>>" %>
<% foreach (var item in Model) { %>
<a href="<%: item.Url %>"><%: item.Title %></a><br />
<%: String.Format("{0:g}", item.Date) %><br />
<%: item.Body %>
<br />
<% } %>
此外,我有一个方法,它接受一个 RSS URL,并返回类型为 Article 的 IEnumerable。
public static class ArticleFeedHelper
{
public static IEnumerable<Models.Article> GetArticles(string feedUrl)
{
// Uncaught exception can happen here (e.g. 404, malformed RSS, etc.)
}
}
在我的一个视图中,我这样调用局部视图:
<div id="articleList" class="section">
<div class="sectionTitle">My Recent Articles</div>
<hr />
<div class="sectionBody">
<% Html.RenderPartial("ArticleList", ArticleFeedHelper.GetArticles(Model.RSSFeed)); %>
</div>
</div>
问题在于我想将错误消息显示到主视图中。仅因无法检索到RSS源而不应该对用户造成如此大的干扰,以至于将其抛弃到完整的错误页面。
解决方法:
部分视图和ArticleFeedHelper保持不变。
使用 Dave's的建议,主视图已更改为:
<div id="articleList" class="section">
<div class="sectionTitle">My Recent Articles</div>
<hr />
<div class="sectionBody">
<% Html.RenderAction("ArticleList", "ArticleList", new { feedUrl = Model.RSSFeed }); %>
</div>
</div>
添加了一个部分控制器:
public class ArticleListController : Controller
{
public ActionResult Index()
{
return View();
}
[ChildActionOnly]
public ActionResult ArticleList(string feedUrl)
{
try
{
IEnumerable<Models.Article> articles = Helpers.ArticleFeedHelper.GetArticles(feedUrl);
return PartialView(articles);
}
catch (Exception ex)
{
// Handle the error and return an error partial view
}
}
}
并且添加了一条路由:
routes.MapRoute(
"ArticleList", // Route name
"{controller}/{action}/{feedUrl}", // URL with parameters
new { controller = "ArticleList", action = "ArticleList", feedUrl = "" } // Parameter defaults
);