2014年7月16日 星期三

讓部分頁面(Partial View)使用類似 @section 的功能

因為部分頁面(Partial View)無法使用 @section 來將javascript或是css放置到 _Layout.cshtml 上指定的位置, 因此擴充 HtmlHelper 來達成相同功能

namespace HappyMovie.Web.Utilities.Helpers
{
    public static partial class HtmlRenderHelper{
        /// <summary>
        /// 讓部分頁面的 Javascript 可以加到 _Layout.chtml
        /// </summary>
        public static IHtmlString Resource(this HtmlHelper HtmlHelperFunc<objectHelperResult> Templatestring Type)
        {
            if (HtmlHelper.ViewContext.HttpContext.Items[Type!= null) ((List<Func<objectHelperResult>>)HtmlHelper.ViewContext.HttpContext.Items[Type]).Add(Template);
            else HtmlHelper.ViewContext.HttpContext.Items[Type= new List<Func<objectHelperResult>>() { Template };
 
            return new HtmlString(String.Empty);
        }
        public static IHtmlString RenderResources(this HtmlHelper HtmlHelperstring Type)
        {
            if (HtmlHelper.ViewContext.HttpContext.Items[Type!= null)
            {
                List<Func<objectHelperResult>> Resources = (List<Func<objectHelperResult>>)HtmlHelper.ViewContext.HttpContext.Items[Type];
 
                foreach (var Resource in Resources)
                {
                    if (Resource != nullHtmlHelper.ViewContext.Writer.Write(Resource(null));
                }
            }
 
            return new HtmlString(String.Empty);
        }
    }
}

在 _Layout.cshtml 上設定位置 :
@Html.RenderResources("css")
@Html.RenderResources("js"<!-- 自定的 HtmlHelper, 讓部分頁面的 Javascript 可以加到 _Layout.chtml -->

在部分頁面上使用 :
@Html.Resource(@<link rel="stylesheet" href="@Url.Content("~/Content/style.css")">"css")
@Html.Resource(@<style>
    .basic-data {
        floatleft;
    }
</style>"css")
@Html.Resource(
@<script>
    $(function () {

    });
</script>"js")


沒有留言: