MVC查看文本框字符串输入到TimeSpan到Time in Seconds Integer

时间:2009-06-08 01:19:18

标签: asp.net-mvc properties

我有一个LINQ to SQL实体类,其中包含一个名为sTime的可为空的int属性,我用它来记录为任务安排的秒数。例如数据库字段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时,我不确定在使用UpdateModel(任务)时如何以及在何处正确设置和获取sTime;在我的任务控制器中。我在想我需要在执行Get时在控制器操作中创建一个TimeSpan,但这对我来说似乎不对,我应该在哪里设置这个属性?有谁可以提供帮助?

2 个答案:

答案 0 :(得分:1)

是的,现在才有意义。 : - )

这就是我接近它的方式......

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>

假设模型绑定器将“hh:mm:ss”字符串绑定到时间跨度没有问题,那么应该可以正常工作并且花花公子。

如果确实有问题,请告诉我。

HTHS, 查尔斯

答案 1 :(得分:0)

这是我视图中的输入文本框

            <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的原因,但是我不知道在哪里或如何设置它。

这会让它更清晰吗?