1

我对.net、mvc 和这个论坛还很陌生。所以请多多包涵,并提前致谢。

我有一个旧数据库,其中包含一个以“hh:mm”形式作为字符串的时间字段。我无法更改数据库,因为它被其他应用程序使用,但我需要读取该字段并将其写回它

理想情况下,我想将小时和分钟分开并将它们显示为两个单独的下拉列表。在使用mvc3和实体框架。我虽然在这种情况下最好的主意是使用视图模型,因为我想要返回的内容与直接在我的数据库表中的不同,但我很难弄清楚如何将这个元素一分为二,渲染它,然后将其粘贴在一起以在数据库上进行更新。

任何人都可以推荐任何关于如何开始的好技巧吗?

4

3 回答 3

1

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)

然后当你得到你的结果时,只需通过将 SelectedHours 和 SelectedMinutes 连接在一起来创建字符串需要。

这可能是最简单的方法。

于 2012-05-15T01:55:47.060 回答
1

欢迎使用 MVC,一旦你习惯了它就会爱上它 :)

要完成此任务,您需要做一些事情:

  1. 将视图中的 html 元素绑定到视图模型

使用 Razor 的示例(这是您的观点):

@Html.LabelFor(m => m.Time)

...如果您想要下拉菜单,则必须使用 @Html.DropDownListFor() 但是您需要为其创建一个 SelectList ... 请参见此处

2. 创建一个 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.

然后你返回 View 和 viewmodel 就可以了。

Return View(vm);
于 2012-05-15T02:06:54.807 回答
1

由于这是数据库中的一列,我建议将这个奇怪的时间字段的逻辑抽象到它自己的类中。

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;
    }
}

使用此类,您可以在从数据库中检索数据后立即创建该类的实例,并在您的视图中使用这些实例,而不是使用字符串解析和操作实现细节来弄乱您的代码。

于 2012-05-15T04:01:13.203 回答