Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#MVC5可维护的环境中创建大视图_C#_Asp.net Mvc_Razor - Fatal编程技术网

在C#MVC5可维护的环境中创建大视图

在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

我有一个应用程序使用MVC5和C#和Razor引擎。此视图显示一个巨大的表:

<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语句)不是一个好的设计。这种逻辑属于控制器。