2010-09-21 32 views
0

我的项目中的其中一个视图的当前代码是一个庞大的,单一的,我只是想组织它。在ASP.NET MVC视图中放置方法是否正确?是否适用于在ASP.NET MVC视图中放置方法?

+2

我认为这绝对没有。但是我建议你给我们一个你会写的方法类型的例子,然后我们可以给你一些选择。 – 2010-09-21 10:56:01

回答

4

我会说绝对不是。 MVC的目的是分离关注的问题,即模型 - 视图 - 控制器。在你的情况下,你正在混合模型/控制器逻辑与你的视图。

如果您需要将复杂内容传递到您的视图中,您应该创建自定义ViewData类,将它们填充到您的控制器中并将它们传递到您的视图中。

如果你的方法更关注于生成视图标记,你应该把它分解成部分视图或者已经建议使用助手扩展方法。

1

这是可能的,但如果您需要视图内的方法,或许您应该考虑用扩展方法扩展Html对象,然后从视图内部使用这些方法。 我喜欢根据功能分隔我的扩展,以保持视图可读。 例如:

public static MySpecialDateHelper SpecialDateHelper(this HtmlHelper helper) 
{ 
    return new MySpecialDateHelper(helper); 
} 


public class MySpecialDateHelper 
{ 
    // Fields 
    private HtmlHelper m_helper; 
    private StringBuilder m_sb = new StringBuilder(); 

    // Methods 
    internal MySpecialDateHelper(HtmlHelper helper) 
    { 
     this.m_helper = helper; 
    } 

     // Print date prettily 
     public public string PrettyDate(datetime target) 
    { 
     // format however 
     return string.format("pretty {0}", target.ToString()); 
    } 

    // Print date prettily 
     public public string PrettyDateInATextbox(datetime target) 
    { 
     return m_helper.TextBox("prettyid",PrettyDate(target)); 
    } 

    // etc... 
} 
在视图

然后,你只需要参考刚刚创建

<%= Html.SpecialDateHelper.PrettyDateInATextbox(Now); %> 

病程的延长,你的方法分离成扩展可能会发生变化,也可以延长直接使用HtmlHelper对象,但我更喜欢这种方法

1

编号

移动控制器,必要时引入视图模型。在那之后,定义你自己的Html助手,考虑到这些应该是HTML的东西,而不是任何逻辑。

你可能在视图中有一些特定于v。v。的特定代码,并且它只是不可能在代码之外做任何事情。但即使如此,只要名称清晰明了,你就可以将其定义在助手中,而不是将其放在视图中。你可以单元测试助手,所以这样做有明显的优势。

相关问题