2010-07-15 11 views
0

Je me demande comment je peux passer un modèle de retour à une action pour que je puisse continuer à travailler sur les données, mais dans une autre action sur la base presséePasser le modèle dans une vue de dos à une action

de la touche Pour le renvoyer, je spécifie Control, Action et utilise le nouveau {dom = Model} pour spécifier le paramètre.

dom

est une liste (donc une liste d'objets de domaine. Mon modèle adopté en est un IQueryable. Quand je fais dom IQueryable, je reçois toujours rien de nouveau de la vue. Est ici l'extrait, en utilisant contrôle Telerik

vOIR

<% Html.Telerik().Grid(Model).Name("Domains") 
     .DataKeys(dataKeys => dataKeys.Add(c => c.DomainId)).DataKeys(dataKeys => dataKeys.Add(c => c.Timestamp)) 
     .Columns(columns => 
      { 
       columns.Template(o => 
       { %> 
     <%= Html.Encode(Html.OutputAction(ViewData["PerformActions"] as List<string>))%> 
     <% 
      }).Title("Action"); 
       columns.Bound(o => o.DomainId); 
       columns.Bound(o => o.Name); 
       columns.Bound(o => o.SiteId); 
       columns.Bound(o => o.ScrubAndRedirect); 
       columns.Bound(o => o.ReportingSiteId); 
       columns.Bound(o => o.TrafficCopClass); 
       columns.Bound(o => o.SiteName); 
       columns.Bound(o => o.FeedType); 
       columns.Bound(o => o.Active); 
      }).Pageable().Sortable().Filterable().DataBinding(db => db.Server().Select("Domains", "Preview", new { doms = Model })).Render();%> 


*ACTION* 

public ActionResult Preview(List<Domain> doms) 
{ 
    return View("Preview", doms.AsQueryable<Domain>()); 
} 

Merci

Répondre

0

Je pense que ce que vous voulez faire est que juste votre aperçu et Commit Si prévisualisation ne postez pas des actions à la fois prendre dans la liste Doms., vous devrez peut-être avoir un E ditorForModel quelque part (même si c'est caché). En d'autres termes, votre vue d'édition est publiée dans l'action de prévisualisation, qui affiche une vue, puis cette page doit publier les données dans votre action de validation. Je crois que cela le ferait. Espérons que cela aide ..

+0

Comment est-ce que je ferais cela? Désolé, je suis très nouveau sur MVC et C#, donc je ne les utilise pas depuis très longtemps. – DMan

+0

Juste plus de la même chose de ce que vous avez déjà. Avoir un public ActionResult Preview (Liste doms) {} puis un public ActionResult Commit (Liste doms) {}, si vous utilisez un helper Html sur la page (comme EditorForModel), la structure de données/DTO sera "POST" retour à l'action Commit. Est ce que ça aide? –

+0

Je vous remercie pour l'aide, J'ai compris comment faire, je au lieu d'essayer de repasser la liste entière, je l'ai juste recréé à partir du chemin du fichier (donc je suis passé le chemin du fichier à la fonction de prévisualisation et avait il reconstruit la liste). Cette méthode étonnamment n'a pas ajouté beaucoup de frais généraux au programme, et c'est pourquoi je ne voulais pas le faire de cette façon, comme je le pensais si je refaisais la liste à chaque fois que cela imposerait sur le système. Merci encore – DMan

0

En général dans MVC, vous ne renvoyez pas de grandes listes d'objets DOM au serveur pour "reconstruire" une liste d'objets d'entité ou de domaine. Lorsque les valeurs sont publiées dans une action du contrôleur, elles proviennent presque toujours d'un formulaire HTML. Dans les coulisses, MVC est d'extraire les valeurs du POST via le

Request.Forms["fieldName"] 

Et puis essayer de carte automatique les valeurs params dans votre ActionMethod. Si je comprends votre scénario, la pratique la plus courante serait de soumettre ou passer une clé (ou un identifiant) au contrôleur lorsqu'une action est déclenchée, puis de l'utiliser pour récupérer les objets de domaine nécessaires (soit à partir d'un cache , à partir d'une base de données, d'un disque, etc.). Si l'évolutivité est une préoccupation, une bonne stratégie de mise en cache peut aider à éviter les opérations d'E/S coûteuses.

Espérons que ça aide.