我项目中其中一个视图的当前代码是一个庞大的单片视图,我只想组织它。将方法放在我的ASP.NET MVC视图中是否正常?
答案 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。相关的特定内容,并且它不可能在那之外做任何代码。但即使这样,你也可以在帮助器中定义它,只要名称非常清楚它的作用,你最好把它放在视图中。你可以单独测试助手,这样做有明显的优势。