最近有个页面,一个大表单字段比较多,而且表也分开了,为了各部分解耦,用到了分部视图,怎么写参官网例子就可以了, 这里说一下怎么引用的JS,(2022年1月13日 追加了解决方法)
分部视图后 其实生成的还是一个页面,各部分可以直接使用父页面的js,但是这样就不模块了,最好自己的View使用自己的js和css,与其他部分交互可以通过注册事件的方式,这样就解耦了,总之 vue 组件 就是香;
直接这样使用,将整个ViewData
都传过去
@section body { @( layout( await Html.PartialAsync("StepView", ViewData), await Html.PartialAsync("Step1View", ViewData), await Html.PartialAsync("Step2View", ViewData), await Html.PartialAsync("Step3View", ViewData), await Html.PartialAsync("Step4View", ViewData), await Html.PartialAsync("Step5View", ViewData), await Html.PartialAsync("Step6View", ViewData) ) ) }
注意
使用分部视图,到最后还是生成一个页面,其中的控件ID,js名称等不要重复,否则就重复了;
这样的只能在爹页面写,可以写在单独的js文件里,引用,但是引用也是在爹写,每个模块的js在父页面引用一遍又割裂了,所以最好还是自己输出自己的js,好在F有现成的
注
F.TextBox().DataField("MES_F1_SH_180").Label("采集SN号") .Listeners( new Listener("enter", "onEnter") )
需要匿名函数包一下,这样就行了👇,
new Listener("enter", "(()=>{onEnter();})();")
通过加入标记,在编译页面时进行输出,后台方法如下:
#region 为分部视图注册引用文件用 /// <summary> /// 注册Items 用以输出 见RenderSection /// </summary> /// <param name="htmlHelper"></param> /// <param name="template"></param> /// <param name="addToSection"></param> /// <returns></returns> public static Microsoft.AspNetCore.Html.HtmlString Section(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Func<object, Microsoft.AspNetCore.Mvc.Razor.HelperResult> template, string addToSection) { htmlHelper.ViewContext.HttpContext.Items[String.Concat("_", addToSection, "_", Guid.NewGuid())] = template; return Microsoft.AspNetCore.Html.HtmlString.Empty; } /// <summary> /// 注册Items 用以输出 见RenderSection /// </summary> /// <param name="htmlHelper"></param> /// <param name="template"></param> /// <param name="addToSection"></param> /// <returns></returns> public static Microsoft.AspNetCore.Html.HtmlString SectionStr(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string template, string addToSection) { htmlHelper.ViewContext.HttpContext.Items[String.Concat("_", addToSection, "_", Guid.NewGuid())] = template; return Microsoft.AspNetCore.Html.HtmlString.Empty; } /// <summary> /// 在分部视图中 添加 js 文件引用 /// </summary> /// <param name="htmlHelper"></param> /// <param name="template"></param> /// <returns></returns> public static Microsoft.AspNetCore.Html.HtmlString addJS(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, Func<object, Microsoft.AspNetCore.Mvc.Razor.HelperResult> template) { return htmlHelper.Section(template, "scripts"); } /// <summary> /// 用作分部视图的 输出 见 Section /// </summary> /// <param name="htmlHelper"></param> /// <param name="sectionName"></param> /// <returns></returns> public static Microsoft.AspNetCore.Html.HtmlString RenderSection(this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper htmlHelper, string sectionName) { foreach (object key in htmlHelper.ViewContext.HttpContext.Items.Keys) { if (key.ToString().StartsWith(String.Concat("_", sectionName, "_"))) { try { var template = htmlHelper.ViewContext.HttpContext.Items[key] as Func<object, Microsoft.AspNetCore.Mvc.Razor.HelperResult>; if (template != null) { htmlHelper.ViewContext.Writer.Write(template(null)); } } catch { } try { var template = htmlHelper.ViewContext.HttpContext.Items[key] as string; if (!string.IsNullOrEmpty(template)) { htmlHelper.ViewContext.Writer.Write(template); } } catch { } } } return Microsoft.AspNetCore.Html.HtmlString.Empty; } #endregion
第二步 在 _Layout.cshtml加入 标记输出位置
@Html.RenderSection("scripts")
在分部视图使用时像这样,
就可以解决上面的问题了,也可以正常使用F.ready了 😀👍👍
本文作者:没想好
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!