2009-06-08 6 views
0

J'ai une classe d'entité LINQ to SQL avec une propriété int null appelée sTime que j'utilise pour enregistrer le nombre de secondes planifiées pour une tâche. par exemple. champ de base de données 120000MVC Afficher la chaîne de texte entrée dans TimeSpan à temps en secondes

J'ai essayé d'ajouter une propriété à la classe Task, mais comment puis-je définir cette propriété lorsque j'utilise une entité LINQ to SQL.

public TimeSpan ScheduledTimeSpan {get; private set;} 

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

que je ferais dans ma Voir

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

Avec MVC Je ne suis pas sûr comment et où pour définir et sTime correctement lorsque j'utilise UpdateModel (tâche); dans mon contrôleur de tâches. Je pensais que je devais créer un TimeSpan à l'intérieur de l'action du contrôleur quand je faisais le Get mais cela ne me semble pas juste, aussi où je devrais mettre cette propriété? Quelqu'un qui peut aider?

+0

Pouvez-vous préciser ce que vous s'il vous plaît voulez? Je ne suis pas sûr si vous voulez savoir comment obtenir sTime comme un timespan ou si vous voulez savoir comment poster un formulaire et ensuite définir/lier des données à sTime OU quelque chose de complètement différent! :-) A bientôt, Charles. – Charlino

Répondre

1

Oui, cela a du sens maintenant. :-)

Voici comment j'approcher ...

classe partielle pour votre 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; 
     } 
    } 
} 

Ensuite, changez votre point de vue d'avoir

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

Cela devrait fonctionner tout bien et dandy en supposant que le classeur modèle n'a aucun problème à lier une chaîne "hh: mm: ss" à une période de temps.

En cas de problème, faites-le moi savoir.

HTHS, Charles

+0

Merci pour la réponse. Je n'ai pas encore essayé, j'ai déjà écrit le get pour cette propriété, mais la façon dont l'ensemble fonctionnait me déroutait. Je pensais à adopter la même approche que celle que vous avez montrée ci-dessus, ce que je ne comprends pas et que je dois examiner est comment cela fonctionne en ce qui concerne la mise à jour du modèle. Je peux voir que l'ensemble est en train de changer sTime, mais comment cela fonctionne finalement, c'est ce que je ne comprends pas .. ne peut que deviner pour le moment. – Pricey

+1

Lorsque la valeur de l'entrée du formulaire ScheduledTimeSpan est renvoyée, le classeur du modèle l'analyse dans un TimeSpan, puis définit la propriété models ScheduledTimeSpan, qui définit à son tour la propriété sTime. Donc, il va mettre à jour le modèle. Savvy? – Charlino

+0

Sons magiques :) merci Charlino – Pricey

0

C'est la zone de texte d'entrée sur mon point de vue

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

Voici le code dans mes .dbml designer.cs derrière.

 [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(); 
      } 
     } 
    } 

Voici le code de mon contrôleur de tâches pour l'action d'édition.

// 
// 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 est un entier (en secondes) et il doit être que quand il entre dans le champ de base de données .. mais l'interface de cette valeur doit être une chaîne de HH: MM: SS.

C'est pourquoi j'essaie d'utiliser un TimeSpan, mais je ne sais pas où et comment le configurer.

Est-ce que cela le rend plus clair du tout?

Questions connexes