使用 asp.net mvc3,如何以与数据存储在数据库中不同的格式显示数据?



我对.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,一旦你习惯了它,你就会爱上它:)

要执行此任务,您需要执行以下几项操作:

  1. 将视图中的 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);

相关内容

  • 没有找到相关文章

最新更新