Goo*_*tan 2 .net asp.net-mvc views partial
我对ASP.NET MVC的设计模式有点困惑.我有一个主页,包括呈现面包屑的局部视图:
<div id="header">
<strong class="logo"><a href="#">Home</a></strong>
<% Html.RenderPartial("BreadCrumbs"); %>
Run Code Online (Sandbox Code Playgroud)
问题是,我希望面包屑链接在生产环境和开发环境中都能正常工作.所以我在局部视图中的代码是这样的:
<p id="breadcrumbs">
You are here: <a href="http://
<% if (Request.Url.IsLoopback)
Response.Write(String.Format("{0}/{1}", Request.Url.Host, Request.Url.Segments[1]));
else
Response.Write("http://mysite.com/");
...
Run Code Online (Sandbox Code Playgroud)
这违反了保持观点"愚蠢"的原则吗?我从网页中提取这个的部分原因是这个原则.似乎我刚刚将问题转移到了新视图?有什么选择?
不确定你使用的MVC版本.如果您使用的是MVC3,则可以创建一个GlobalActionFilter:http://weblogs.asp.net/gunnarpeipman/archive/2010/08/15/asp-net-mvc-3-global-action-filters.aspx
public class ViewBagInjectionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
filterContext.Controller.ViewBag.SiteUrl = filterContext.HttpContext.Request.Url.IsLoopback
? String.Format("{0}/{1}",
filterContext.HttpContext.Request.Url.Host,
filterContext.HttpContext.Request.Url.
Segments[1])
: "http://mysite.com/";
}
}
Run Code Online (Sandbox Code Playgroud)
然后,此过滤器可以将一个属性添加到您的ViewBag(这是一个动态对象)中SiteUrl,在其中,您可以根据您所处的状态设置站点URL.
在PartialView中,您将不再需要该if语句,只需调用:ViewBag.SiteUrl.此外,任何其他页面都可以访问SiteUrl属性.
| 归档时间: |
|
| 查看次数: |
1856 次 |
| 最近记录: |