是否适用于在ASP.NET MVC视图中放置方法?

时间:2010-09-21 09:45:55

标签: c# asp.net-mvc asp.net-mvc-2

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

3 个答案:

答案 0 :(得分:4)

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

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

如果您的方法与生成View标记更相关,您应该考虑将其拆分为部分视图,或者已经使用帮助扩展方法建议。

答案 1 :(得分: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对象,但我更喜欢这种方法

答案 2 :(得分:1)

没有。

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

你可以在视图中找到与v。v。相关的特定内容,并且它不可能在那之外做任何代码。但即使这样,你也可以在帮助器中定义它,只要名称非常清楚它的作用,你最好把它放在视图中。你可以单独测试助手,这样做有明显的优势。