Helper方法生成小型HTML片段我使用ASP.NETMVC将HTML视图与模型分开。但是,有一种特殊情况让我感到困惑。我有几个常用的小信息板,它们本身由许多较小的信息板组成。这些数据来自各种模型中包含的子类,有时作为单个实例,有时作为对象列表。目前,这是使用部分视图完成的,通过模型参数传递适当的数据,如下所示:@Html.Partial("UserInfo",this.Model.CurrentUser);@Html.Partial("用户信息",reply.PostedBy);等一切正常。我最近遇到了一个要求,感觉它延伸了这个模型的明显限制——但它会涉及大量的局部视图,每个视图都有少量的HTML,嵌套了很多次。页面解析时间似乎开始有点失控,我怀疑搜索量和反映的局部视图可能与此有关。请注意:我假设重复的HTML应该是相同的并且仍然可以避免。我可以通过在一些更高级别的控件中使用HTML的副本来简化嵌套,但我认为这会损害可维护性。对于最底层的人来说,创建生成并返回所需HTML的静态帮助类似乎更有意义——但是,尽管MVC本身使用Html帮助类,但感觉这与MVC模式相反.很明显这种方式还是将helper方法和model分离了,但是既然要用到model,我还真没看出来到底是怎么解耦的。静态助手与扩展方法相去甚远,可以以userInstance.InfoHtml()类型的方式使用,这似乎使整个方法非常类似于向模型添加助手方法。这当然是MVC首先要摆脱的!请注意:我不是想规避规则或抱怨!我只想尽可能将其视为“按模式”。如果有很多很多局部视图,我会尽力坚持这个和性能调整。我相信在问题中重用html有四种常见的解决方案。局部视图(@Html.Partial);子动作(@Html.Action);自定义静态助手(@Html.Whatever、@Url.Whatever、模型上的扩展方法等);剃须刀帮手。(@helper)是否可以使用静态帮助器类生成小的HTML片段?是否可以使用静态帮助器类生成小的HTML片段。我不喜欢将它们作为方法添加到模型中,扩展方法也很好。我想说这些方法之间的区别主要在于编码风格和个人喜好。我会使用部分视图来分解消耗品的大视图,应用程序真正常见和独立部分的子操作(如小部件或登录框),所以我不必为所有视图模型填充通用数据事物。对于非常小的html片段(表单中的字段),我会使用静态助手或razor助手,为静态助手提供更多代码,为razor助手提供更多html。静态UserInfo类应该去哪里?看法?控制器?别处?从模式的角度来看,这些东西属于视图。如果您询问应该在您的解决方案中填充哪些文件夹,我会建议一个特殊的文件夹(可能是HtmlHelpers)。驻留在App_Code文件夹中的共享RazorHelpers可能存在限制。我认为以下问题会给你更多关于如何选择它们的想法:在ASP.NETMVC中使用Razor创建可重用的HTML视图组件;如何在ASP.NETMVC中创建可重用控件;如何使用动态内容创建ReusableHTMLFragments;ASP.NETMVC:Razor@helper与HtmlHelper的扩展方法——哪个更流行?.更新新的ASP.NETMVC中可能有第五种解决方案:ViewComponents。据我所知,您可以使用它们代替子动作。根据您在此处提供的内容,很难说出什么是最适合您的路径。很大程度上取决于你在做什么和你想要达到的目标。例如,您当前通过局部视图包含的用户信息内容听起来更像是由子操作提供的:[Authorize]publicclassAccountController:Controller{...[ChildActionOnly][AllowAnonymous]publicActionResultUserInfo(){//在这里获取你的用户信息returnPartialView("UserInfo",userInfo);然后在你的视图/布局中:@Html.Action("UserInfo","Account")然后你不需要确保你正在使用任何ViewModels填充了User对象。接下来,像Html.Partial这样的Razor助手本身只是Url.*助手的HtmlHelper或UrlHelper扩展。添加您自己的扩展方法没有错。例如,在开箱即用地将HtmlHelper放入MVC5之前,通常使用自定义EnumDropDownListFor扩展HtmlHelper。然而,扩展实际上最适合少量的HTML,这似乎是您想在这里使用的。对于大块的HTML,使用partials更有意义。但两者都有效。很多事情都取决于您来决定什么对您的应用程序最有意义。以上就是C#学习教程:Helper方法生成HTML小代码片段的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
