ASP.NET中Partial Class部分类

借使您在支付品种的公用函数库,用于公用函数库的剧情越丰硕越好,但那不大概刹那间就写好,要求一点一点的积淀,那时就能够使用Partial
Class,每隔一段时间将你新开采的Partial
Class类的次第上流传服务器上或特定的目录下;而无需将新的代码复制粘贴到原本的程序代码中,收缩不须求的难为。

 

众多动静Partial是内需援用到JS的,经常做法是吧JS在援用Partial的页面中投入JS文件或然JS代码。

Partial类型是三个纯语言层的编写翻译处理,不影响别的实施机制——事实上C#编译器在编写翻译的时候仍会将依次部分的片段类型合併成一个完全的类。

背景:ASP.NET MVC 4.0

前阵子英特网来看一段代码能够在Partial页面中加多JS,输出道援用页面。

一、什么状态下使用总局类?

@{ Html.RenderPartial(…); }

public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName)
{
     htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer,    ViewEngines.Engines);
}

上面是@{ Html.RenderPartial(“_ASP.NET中Partial Class部分类。ArticleTable”); }
RederPartial对应的艺术证明

(1).此方法内调用 htmlHelper.ViewContext.Writer 进行输出,
通俗的领会, Html.RenderPartial方法是平素光彩夺目模板,
将结果直接Reponse到浏览器,
所以在视图语法中须要用大括号{}”接住”RenderPartial方法的回到值.
所以又有人就像此说:RenderXXX的艺术再次回到值是void,
在措施内部开展输出;

(2).重申一点, RenderPartial带”总计”功用,
能够直接”得到”父View中流传的model,即不用单独为RenderPartial传入model

  public static class HtmlExtensions    {        private const string JscriptDeferRazorViewdata = "__jsdfrz";        private const string JscriptIncludeViewdata = "__jsrq";        public static void DeferScript(this HtmlHelper html, string scriptLocation)        {            string jsTag = "<script type=\"text/javascript\" src=\"" + scriptLocation + "\"></script>";            var jscripts = html.ViewContext.TempData[JscriptIncludeViewdata] as List<string> ?? new List<string>();            if (!jscripts.Contains            {                jscripts.Add;            }            html.ViewContext.TempData[JscriptIncludeViewdata] = jscripts;        }        public static MvcHtmlString Script(this HtmlHelper html, Func<int, HelperResult> script)        {            var jsActions = html.ViewContext.TempData[JscriptDeferRazorViewdata] as List<Func<int, HelperResult>> ?? new List<Func<int, HelperResult>>();            jsActions.Add;            html.ViewContext.TempData[JscriptDeferRazorViewdata] = jsActions;            return MvcHtmlString.Empty;        }        public static IHtmlString RenderScripts(this HtmlHelper html)        {            var jscripts = html.ViewContext.TempData[JscriptIncludeViewdata] as List<string>;            var jsActions = html.ViewContext.TempData[JscriptDeferRazorViewdata] as List<Func<int, HelperResult>>;            html.ViewContext.TempData[JscriptIncludeViewdata] = new List<string>();            html.ViewContext.TempData[JscriptDeferRazorViewdata] = new List<Func<int, HelperResult>>();            return new HelperResult(writer =>            {                if (jscripts != null)                {                    writer.Write(string.Join("\r\n", jscripts.ToArray;                }                if (jsActions != null) foreach (var action in jsActions) { action(0).WriteTo; }            });        }    }

品种比极大,不宜放在一个文本中落到实处。
叁个体系中的一有的代码为自动化工具生成的代码,不宜与我们团结编写的代码混合在联合具名。
亟需四人同盟编写四个类。

@Html.Partial(….) 

一直就在chmtl模板页中如此用,无需用大括号{}包住

public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName)
{
    return htmlHelper.Partial(partialViewName, null, htmlHelper.ViewData);
}


public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData)
{
    using (StringWriter writer = new StringWriter(CultureInfo.CurrentCulture))
    {
        htmlHelper.RenderPartialInternal(partialViewName, viewData, model, writer, ViewEngines.Engines);
        return MvcHtmlString.Create(writer.ToString());
    }
}

 请注意,
Partial方法将结果输出到有时变量StringWriter

在援用Partial的页面中增多:

二、Partial类型上的修饰符

@section scripts{    @Html.RenderScripts()}

二个门类的逐条部分上的拜会修饰符必得保证一致性。
设若一个类别有三个部分使用了abstract修饰符,那么全部类都将被视为抽象类。
假如三个门类有二个片段应用了 sealed
修饰符,那么一切类都将被视为密闭类。
一个类的次第部分无法使用相互争论的修饰符,例如不能够在三个某个上应用abstract,又在另叁个有个别上利用sealed。

Partial页面:

三、Partial品种的基类和接口

@{    Html.Script(        @<script type="text/javascript">          //再此些你的JS代码         </script>        );   Html.DeferScript("//再此引用你的JS文件");}

三个类其余次第部分上点名的基类必需一律。某些部分能够不钦点基类,但万一钦赐,则必需一律。
Partial类别上的接口具有“累加”效应。
partial class Class2: Iinterface1, Iinterface2 {}
partial class Class2: Iinterface3 {}
partial class Class2: Iinterface2 {}
相当于
class Class2: Iinterface1, Iinterface2, Iinterface3 {}

四、局地类型的应用性格

在一些类型上的风味具备“累加”效应。

[Attribute1, Attribute2]
partial class Class1{}

[Attribute3, Attribute2]
partial class Class1{}

相当于
[Attribute1, Attribute2, Attribute3, Attribute2]
class Class1 {}

发表评论

电子邮件地址不会被公开。 必填项已用*标注