我有一个内部应用程序,我需要有两个日期类型元素的下拉列表: 月和年.这些值不在数据库或其他信息库中.
我知道我可以通过将它们添加到像对象这样的字典中来设置一个包含我需要的值的列表(我需要将Month与数值表示相关联,January => 01):
var months = new Dictionary<String,String>();
months.Add("01", "January");
...
Run Code Online (Sandbox Code Playgroud)
今年的下拉列表将更容易,因为我可以选择一个起始年份并在通用列表中迭代到当前或当前+ 1年.
有没有更好的方法来处理这些数据元素?内置的东西,或者我应该实现的良好设计模式?
在RC1中,用于创建视图的模板的行为已更改.
正如Scott Gu关于候选版本的帖子所解释的那样,新创建的aspx视图不再具有默认的代码隐藏文件.
根据反馈,我们已将视图模板更改为默认情况下没有代码隐藏文件.此更改有助于强化MVC应用程序中的视图的目的(这些应用程序纯粹是关于呈现并且不包含任何非呈现相关代码),并且对于大多数人来说,消除了项目中未使用的文件.
RC构建现在添加了C#和VB语法支持,用于从使用泛型的基类继承视图模板.例如,下面我们使用Edit.aspx视图模板 - 其"inherits"属性派生自ViewPage类型:
我真的希望能够在代码隐藏中编写特定于视图的代码来输出视图 - 特别是如果我在页面的几个部分重复了逻辑,我无法证明创建局部视图.
我的实际问题:斯科特默认说- 这意味着我可以改变这种行为,但我似乎无法看到哪里.可能吗?手动创建代码隐藏文件并改变现状是一件痛苦的事.
这也会导致另外一个问题:
附录:对于那些想知道为什么我想要代码隐藏的人来说,这是一些可能的原因.这是我所想到的几乎所有内容的累积列表.不言而喻(除此之外)您不得访问除模型中已有数据之外的任何数据.LINQ可以很好地处理模型数据,但LINQ to SQL不会!MVC适合那些应该已经知道这一点的人 - 这就是我喜欢它的原因 - 聪明人为智能人士制作.
IEnumerable<Product>,但我不认为你应该有一个HtmlHelper需要一个ProductModel.Html+dot,我真的想尽可能地减少这个列表.HtmlGenericControl该命名空间中的其他类的代码以面向对象的方式生成我的HTML(或者我有现有的代码来执行我想要移植的代码),该怎么办?我认为人们对"代码隐藏"有偏见,因为它传统上被解释为"事件处理代码"而不是"视图的另一半部分类",这就是它的本质.
视图的代码隐藏就好了.
我并不反对它使文件夹结构稍微混乱,但这就是+图标的用途.我只是希望能够使用"添加视图"创建具有代码隐藏的视图.
渲染这样的控件有什么好处:
<% Html.RenderPartial("MyControl") %> or
<%=Html.TextBox("txtName", Model.Name) %>
Run Code Online (Sandbox Code Playgroud)
在Web表单样式:
<uc1:MyControl ID=MyControl runat=server />
Run Code Online (Sandbox Code Playgroud)
我理解性能可能是一个原因,因为不需要创建任何对象,但是有可能从代码库中调用它只是为了做一些基本的渲染逻辑可能非常有用.
如果不鼓励这样做,那么你如何处理这种情况:
您需要有条件地使控件可见,并且您不希望用渲染逻辑填充HTML.
你有,<input type="text" value="<%= Model.Name %>" />但你需要检查Model是否为null,因为否则会引发NullPointerException.
[编辑]当我开始使用ASP MVC时我问过这个问题,现在我看到了像Cristian一样的MVC方式的优点.