什么是“表示逻辑”,视图中可接受多少?


13

在我的Web应用程序中,我必须提供用于创建和编辑的表单。创建和编辑的形式存在细微差别,因此我认为在我看来是这样的:

<form>
// a lot of htnl goes here 
@if (editing)
{
  // some more fields shown in edit mode
}
@if(!editing)
{
 // some stuff shown in create mode
}

我一直试图不在if视图中放置任何语句,但是这次我看不到任何其他选择,只是在两个地方复制了很大一部分HTML,我不想这样做。这是正确的“表示逻辑”吗,还有其他选择吗?

Answers:


17

表示逻辑包括为特定视图以正确的方式表示业务数据所需的逻辑和计算。
对于复杂的图形视图,这可能是非常复杂的计算(例如,计算每个饼图的大小和饼图的标签的位置),但是主要特征是它仅计算与当前信息相关的信息视图,并且它不会以任何方式修改业务数据。

对于编辑/创建模式的字段选择是否正确使用表示逻辑尚有争议。在某种程度上,它取决于定制的种类和数量。
例如,如果区别仅仅是标题更改,或者在一种模式下将一个或两个字段显示为只读,那么拥有一个视图并动态选择模式可能是正确的选择。
另一方面,我的第一个反应是,它实际上应该是两个不同的视图,其中公共部分是从第三个文件中导入的(类似于将页眉和页脚添加到视图中的方式)。


12

在Razor视图中使用一两个@if语句似乎是完全合理的。
他们在Razor中添加了@if-应该使用。

您的代码可以缩短为一个@if:

@if (editing)
{
  // some more fields shown in edit mode
}
else
{
 // some stuff shown in create mode
}

一种替代方法是使用三个视图:

  • 包含通用HTML的部分视图
  • 创建视图(调用局部视图)
  • 编辑视图(也称为局部视图)

您可以签出DisplayTemplates和EditorTemplates,这是拆分只读视图和可编辑视图的好方法。

http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.