繁体   English   中英

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

[英]Using asp.net mvc3, how do I display data in a different format to how it's stored in the database?

我是.net,mvc和这个论坛的新手。 所以请耐心等待,并提前致谢。

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

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

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

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连接在一起就可以创建字符串。

这可能是最简单的方法。

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

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

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

使用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);

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

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

使用此类,只要从数据库中检索数据,就可以简单地创建类的实例,并在视图中使用这些实例,而不是通过字符串解析和操作实现细节来修复代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM