MVC View Строка ввода текста в поле TimeSpan to Time in Seconds Integer - PullRequest
0 голосов
/ 08 июня 2009

У меня есть класс сущностей LINQ to SQL со свойством nullable int, называемым sTime, который я использую для записи количества секунд, запланированных для задачи. например поле базы данных 120000

Я попытался добавить свойство в класс Task, но как мне изначально установить это свойство, когда я использую сущность LINQ to SQL.

public TimeSpan ScheduledTimeSpan {get; private set;}

int seconds = sTime ?? 0;
TimeSpan ts = new TimeSpan(0, 0, 0, seconds, 0);
ScheduledTimeSpan = ts;

Я бы сделал это в моем представлении

<td><%= Html.Encode(task.ScheduledTimeSpan.TotalSeconds.ToString("hh:mm:ss")) %></td>

С MVC я не уверен, как и где правильно установить и получить sTime, когда я использую UpdateModel (задачу); в моем контроллере задач. Я думал, что мне нужно создать TimeSpan внутри действия контроллера при выполнении Get, но мне это не кажется правильным, а также где мне следует устанавливать это свойство? Кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 09 июня 2009

Да, это имеет смысл сейчас. : -)

Вот как бы я подошел к этому ...

Частичный класс для вашего TaskClass

public partial class Task
{
    public TimeSpan ScheduledTimeSpan
    {
        get
        {
            int seconds = sTime ?? 0;
            return new TimeSpan(0, 0, seconds);
        }

        set
        {
            if (value != null)
                sTime = (int)value.TotalSeconds;
        }
    }
}

Затем измените ваше мнение, чтобы иметь

<p>
    <label for="ScheduledTimeSpan">Scheduled Time:</label>
    <%= Html.TextBox("ScheduledTimeSpan", Model.Task.ScheduledTimeSpan.ToString("hh:mm:ss"))%>
    <%= Html.ValidationMessage("ScheduledTimeSpan", "*") %>
</p>

Это должно работать нормально, если предположить, что у связующего устройства нет проблем с привязкой строки "чч: мм: сс" к временному интервалу.

Если у него есть проблемы, дайте мне знать.

HTHS, Charles

0 голосов
/ 08 июня 2009

Это текстовое поле ввода на мой взгляд

            <p>
            <label for="sTime">sTime:</label>
            <%= Html.TextBox("sTime", Model.Task.sTime)%>
            <%= Html.ValidationMessage("sTime", "*") %>
        </p>

Это код в моем .dbml designer.cs позади.

        [Column(Storage="_sTime", DbType="Int")]
    public System.Nullable<int> sTime
    {
        get
        {
            return this._sTime;
        }
        set
        {
            if ((this._sTime != value))
            {
                this.OnsTimeChanging(value);
                this.SendPropertyChanging();
                this._sTime = value;
                this.SendPropertyChanged("sTime");
                this.OnsTimeChanged();
            }
        }
    }

Вот код из моего контроллера задач для действия редактирования.

//
// GET: /Tasks/Edit/5

public ActionResult Edit(int id)
{
    Task task = taskRepo.GetTask(id);

    return View(new TaskViewModel(task));
}

//
// POST: /Tasks/Edit/5

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection collection)
{
    Task task = taskRepo.GetTask(id);

    try
    {
        UpdateModel(task);

        taskRepo.Save();

        return RedirectToAction("Details", new { id = task.taskId });
    }
    catch
    {

    ModelState.AddRuleViolations(task.GetRuleViolations());
        return View(new TaskViewModel(task));
    }
}

sTime - целое число (время в секундах), и оно должно быть таким, когда оно входит в поле базы данных ... но интерфейсом для этого значения должна быть строка HH: MM: SS.

Именно поэтому я пытаюсь использовать TimeSpan, однако я не знаю, где и как это настроить.

Разве это делает это понятнее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...