2009-06-08 15 views
0

タスク用にスケジュールされた秒数を記録するために使用している、sTimeというnull可能なintプロパティを持つLINQ to SQLエンティティクラスがあります。例えばデータベースフィールド120000MVC View Timebox to Texts文字列入力を秒単位で整数整数

プロパティを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; 

私は私のビューMVCで

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

私は私がのUpdateModel(タスク)を使用していたときに正しくSTIMEを設定および取得する方法と場所についてわからない午前中にこれを行うだろう。私のタスクコントローラで。私はGetを実行するときにコントローラアクション内にTimeSpanを作成する必要があると思っていましたが、それは私にとって正しいとは思えません。また、このプロパティを設定する必要がありますか?助けることができる人は誰ですか?

+0

は、あなたが望むものを明確にしてくださいことはできますか?あなたがフォームを投稿する方法を知りたいのであれば、sTimeをタイムスパンとして得る方法を知りたいのか、あるいはsTimeに何かのデータをセット/バインドするか、まったく違うものがあるかどうか分かりません! :-)乾杯、チャールズ。 – Charlino

答えて

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

はその後、すべて動作するはず

​​

を持っているあなたのビューを変更するために:-)

これは...私はそれに近づくだろうか

部分クラスでありますモデルのバインダーが "hh:mm:ss"文字列をタイムパンにバインドするのに問題がないと仮定して、きれいで素敵です。

問題がある場合は、教えてください。

HTHS、 チャールズ

+0

返事をありがとう。私はまだこれを試していない、私はこのプロパティのための取得を書いたが、セットが働いた方法は私を混乱させていた。 私はあなたが上に示したのと同じアプローチをとることを考えていました。私が理解していなくて、調べる必要があるのは、モデルの更新に関してこれがどのように機能するかです。 セットがsTimeを変更しているのがわかりますが、これがどういう仕組みになっているのかは私がはっきりしていないことです。 – Pricey

+1

ScheduledTimeSpanフォーム入力からの値がポストバックされると、モデルバインダーはこれを解析してTimeSpanにし、次にScheduledTimeSpanプロパティーを設定します。これによりsTimeプロパティーが設定されます。したがって、モデルを更新します。賢明? – Charlino

+0

魔法のように聞こえます:)感謝チャーリー – Pricey

0

これはこれは、背後にある私の.dbml designer.csのコードである私の見解で入力テキストボックス

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

です。

 [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を使用しようとしていますが、これを設定する場所や設定方法はわかりません。

これですべてが明確になりますか?

関連する問題