我有用于显示一个人的RSS提要顶的X文章的局部视图(ASCX):我应该如何处理ASP.NET MVC部分视图的异常?
<%@ 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,并返回一个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提要不能被检索到,不应该如此具有破坏性,以至于无法将用户投放到完整的错误页面。
RESOLUTION:
局部视图,和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
);
我喜欢这个想法,但是Model是如何传递给控制器的? – 2010-08-23 21:30:01
对不起,我混了一些东西。我现在已经扩大了我的答案,我希望现在更清楚。 – davehauser 2010-08-24 18:33:03