在C#MVC5可维护的环境中创建大视图
我有一个应用程序使用MVC5和C#和Razor引擎。此视图显示一个巨大的表:在C#MVC5可维护的环境中创建大视图,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有一个应用程序使用MVC5和C#和Razor引擎。此视图显示一个巨大的表: <table class="table table-bordered" id="pendingTable"> <thead> <tr> <th>Actions</th> <th>Order Status</th> <th>Orde
<table class="table table-bordered" id="pendingTable">
<thead>
<tr>
<th>Actions</th>
<th>Order Status</th>
<th>Order Details</th>
<th>Order Date</th>
<th>Expected Delivery Date</th>
<th>Ordered By</th>
<th>Employee ID</th>
<th>Employee Status</th>
<th>Employee Name</th>
<th>Employee Type</th>
<th>Scope</th>
<th>Delivery Address</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td></td> <!-- At least 8 TDs each one with hundreds of lines of code-->
</tr>
</tbody>
</table>
行动
订单状态
订单详情
订购日期
预期交货日期
订购人
员工ID
雇员身份
员工姓名
员工类型
范围
送货地址
评论
现在,问题是所有的东西都在一个大文件中。正如您所猜测的,这个文件是一个更新和维护的噩梦
所以我熟悉C#区域
指令,但我找不到任何类似的视图。我也知道部分视图,但从StackOverflow中的讨论中我有一个强烈的印象,即只有在视图中有一段代码是可重用的时,才应该使用这些视图,事实并非如此
处理如此大的视图的最佳方法是什么 使用
PartialView
是正确的方法
即使只在一个地方使用,PartialView
也有助于实现关注点的分离,就像您在这里看到的情况一样,将大文件有效地分离为更易于读取和维护的小文件
但是,如果您在<>代码>视图/代码>中有严重的逻辑,请考虑在处理该逻辑的过程中创建<代码> VIEWSMODS类。 例如,对于不同的用户类型,可以使用不同的
ViewModels
。随后,您可以使用单独的PartialViews
呈现有关不同用户类型的信息
现在假设您正在寻找一种廉价的解决方案。如果您有时间和意愿研究更复杂、更有效的解决方案,请遵循评论中Stephen Muecke的建议。他正确地指出,最好的方法是使用
EdiorTemplate
和/或自定义HtmlHelper
“TDs,每个都有数百行代码”听起来像是这里的问题。理想情况下,代码应该由控制器执行,视图只是提供了一个可枚举的行集合来呈现。每个行有数百行!?!里面一定有C代码,是吗?将C#out分离成不同类文件中的方法,然后在视图中调用这些方法。对于大部分标记,请将它们拆分为部分视图。为什么每个
都有数百行代码?每个
都很容易有100行代码,因为我需要检查很多条件。例如,如果您是管理员,您会看到更多信息,如果您是帮助台,您会看到更多帮助按钮,如果您是订单经理,您可以访问额外的注释,等等。此检查应在从数据库加载数据之前完成,如果userType是Admin,则您应仅将相关数据加载到Admin。如果没有其他方法,我想这就行了。谢谢还有很多其他的方法。更好的方法是使用自定义的EditorTemplate
,或者更好的方法是使用自定义的HtmlHelper(如果您有需要回发的控件,那么局部视图肯定不是正确的方法)。我完全同意,这些是更好的方法。然而,我的猜测是OP正在寻找一个快速的解决方案。从来没有听说过定制的EditorTemplate
,也没有听说过定制的HtmlHelper
。它们是如何工作的,又能如何帮助我?@Flame_Phoenix,如果你使用(cringe)@If(ViewBag.blablabla)
,我一点也不惊讶:)。这个问题太大,无法在这里回答,但建议您进行一些研究(包括使用视图模型来表示您想要显示的内容)。但是,正如上面所有的评论所表明的,一个视图包含超过1或2个if
语句(更不用说100语句)不是一个好的设计。这种逻辑属于控制器。