MVC - 需要仅修改视图中字段的时间值

时间:2011-11-04 20:35:26

标签: c# model-view-controller datetime view

在视图中,我只需要修改datetime类型的字段的时间部分。 我不确定这是如何工作的。一种方法可能是传递提示,但不确定如何实现。

感谢

4 个答案:

答案 0 :(得分:4)

你的问题不是很清楚你想做什么,但从我收集的内容我想你想要显示日期并只编辑时间。在这种情况下,可以像这样完成:

在你的模特中:

public class FooModel
{
    public string Date { get; set; }
    public string Time { get; set; }
}

在您的控制器中:

public class FooController
{
    [HttpGet]
    public ActionResult Foo()
    {
        var dateTime = DateTime.Now();
        var model = new Foo 
                        { 
                            Date = dateTime.ToShortDateString(), 
                            Time = dateTime.ToShortTimeString() 
                        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Foo(FooModel model)
    {
        DateTime updatedDateTime;
        var dateTime = string.Format("{0} {1}", model.Date, model.Time);
        var isValid = DateTime.TryParse(dateTime, out updatedDateTime);               

        if (!isValid)
        {
            ModelState.AddModelError("Time", "Please enter a valid Time.");
            return View(model);
        }

        // process updates

        return View("Success");
    }
}

在您看来:

@model FooModel

@using (Html.BeginForm()) {

    @Html.ValidationMessage("Time")

    Date: @Html.DisplayFor(m => m.Date) <br />
    Time: @Html.EditorFor(m => m.Time)


    <p>
        <input type="submit" value="Save" />
    </p>
}

答案 1 :(得分:0)

您可以使用ToString方法更改格式。 HERE是所有不同格式选项的列表。仅限时间,请跳至标题为“The”f“自定义格式说明符”

的部分
Console.WriteLine(TimeFld.ToString("hh:mm:ss.f", ci));
// Displays 07:27:15.0

在您的MVC视图中,您可以

@TimeFld.ToString("hh:mm:ss.f", ci);

答案 2 :(得分:0)

DateTime.ToString()

另外,here is a list of standard format options

或者,你可以roll your own

在剃刀中:

@Foo.ToString("MMMM dd, yyyy")

将返回(今天),

  

2011年11月8日

答案 3 :(得分:0)

在.NET中,不能仅更改DateTime字段的时间部分,因为DateTime是不可变的结构。这是来自MSDN,"Working with DateTime Members"

使用DateTime结构时,请注意DateTime类型是不可变的值。因此,DateTime.AddDays等方法检索新的DateTime值而不是递增现有值。以下示例说明如何使用语句dt = dt.AddDays(1)将DateTime类型增加一天。
public static void Main()
{
  Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

  DateTime dt = DateTime.Now;
  Console.WriteLine("Today is {0}", DateTime.Now.ToString("d"));

  // Increments dt by one day.
  dt = dt.AddDays(1);
  Console.WriteLine("Tomorrow is {0}", dt.ToString("d"));

}

如您所见,唯一有效的方法是为DateTime字段分配新值。 DateTime类型支持时间操作方法AddHours, AddMinutes, AddSeconds and AddMilliseconds。但是,这些方法仅返回DateTime,因此您必须将View Model上的属性设置为新值,以使其显示在视图中。

您可能还想查看此帖子:How to change time in datetime?。 (Jon Skeet回答)。