我对.net,mvc和这个论坛相当陌生。所以请耐心等待,提前表示感谢。
我有一个旧数据库,其中包含一个字符串形式的"hh:mm"形式的时间字段。我无法更改数据库,因为它被其他应用程序使用,但我需要将该字段读取并写回它
理想情况下,我想将小时和分钟分开,并将它们显示为两个单独的下拉列表。在使用 mvc3 和实体框架时。在这种情况下,我认为最好的主意是使用 viewmodel,因为我要返回的内容与直接在数据库表中返回的内容不同,但我很难弄清楚如何将这个元素一分为二,渲染它,然后将其粘在一起以在数据库上更新。
任何人都可以推荐任何关于如何开始的好技巧吗?
由于这是数据库中的一列,我建议将这个奇数时间字段的逻辑抽象到它自己的类中。
class MyTimeField
{
public int Hours { get; set; }
public int Minutes { get; set; }
public MyTimeField(String timeString)
{
var stringParts = timeString.Split(":");
if(stringParts.length != 2) throw ArgumentException();
Hours = Int32.Parse(stringParts[0]);
Minutes = Int32.Parse(stringParts[1]);
}
public override String ToString()
{
return Hours + ":" + Minutes;
}
}
使用此类,您可以在从数据库中检索数据后立即创建类的实例,并在视图中使用这些实例,而不是使用字符串分析和操作实现细节来破坏代码。
String.Split(':');
会给你一个 3 个字符串的数组 ["hh", ":", "mm"]
您可以通过类似的东西来扩展视图模型的想法
public class ViewModel
{
public string SelectedHours;
public string SelectedMinutes;
public SelectList AllHours;
public SelectList AllMinutes;
}
您需要列出所有小时和所有分钟,并创建一个新的选择列表 http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist.aspx
然后,在您的视图上,您可以使用 @Html.DropDownListFor 方法。
@Html.DropDownListFor(model => model.SelectedHours, Model.AllHours)
然后,当您返回结果时,只需通过将"选定小时"和"选定分钟"连接在一起来创建字符串需求。
这可能是最简单的方法。
欢迎来到 MVC,一旦你习惯了它,你就会爱上它:)
要执行此任务,您需要执行以下几项操作:
- 将视图中的 html 元素绑定到视图模型
使用剃刀的示例(这是您认为的):
@Html.LabelFor(m => m.Time)
。如果你想要下拉列表,你必须使用@Html.DropDownListFor(),但你需要为它创建一个选择列表...看这里
阿拉伯数字。创建一个 ViewModel 类并包含一个属性来保存字符串值时间
3 .在控制器中,在数据库数据返回后,调用帮助程序方法(或者,如果最小,则可以在操作本身中执行逻辑)以拆分字符串并将结果保存到视图模型中。
TimeModel vm = new TimeModel();
vm.Time = String.Split(:); // Here is where u could call your helper method or add whatever logic you want to use to make the pretty string value.
然后你返回视图和视图模型,然后就可以了。
Return View(vm);