MVC - необходимо изменить только значение времени для поля в представлении - PullRequest
0 голосов
/ 05 ноября 2011

В представлении мне нужно изменить только часть времени для поля типа datetime.Я не уверен, как это будет работать.Одним из способов может быть передача подсказки, но не уверенность в том, как это можно сделать.

Спасибо

Ответы [ 4 ]

4 голосов
/ 08 ноября 2011

Ваш вопрос не очень ясен относительно того, что вы хотите сделать, но из того, что я понял, я предполагаю, что вы хотите отобразить дату и изменить только время. В этом случае это можно сделать так:

В вашей модели:

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>
}
0 голосов
/ 13 ноября 2011

В .NET невозможно изменить только часть времени поля DateTime, потому что DateTime является неизменной структурой. Это из MSDN, «Работа с членами DateTime» :

При работе со структурой DateTime помните, что тип DateTime является неизменным значением. Поэтому такие методы, как DateTime.AddDays, получают новое значение DateTime вместо увеличения существующего значения. В следующем примере показано, как увеличить тип DateTime на день с помощью инструкции dt = dt.AddDays (1).
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 и AddMilliseconds. Однако эти методы возвращают только новое DateTime значение , поэтому вам необходимо установить для свойства вашей модели представления новое значение, чтобы оно отображалось в вашем представлении.

Вы также можете проверить это сообщение: Как изменить время в datetime? . (Джон Скит ответил на это).

0 голосов
/ 08 ноября 2011

См. DateTime.ToString () .

Также, вот список стандартных параметров формата .

Или вы можете бросить свой собственный .

В бритве:

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

вернется (на сегодня),

08 ноября 2011 г.

0 голосов
/ 08 ноября 2011

Вы можете использовать метод ToString для изменения формата. ЗДЕСЬ - список всех вариантов формата. Только на время, перейдите к разделу "f" Спецификатор пользовательского формата "

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

В вашем MVC View вы бы сделали

@TimeFld.ToString("hh:mm:ss.f", ci);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...