2010-10-08 9 views
0

Je suis un débutant dans l'application ASP.NET MVC. Ce que j'essaye de faire est de créer un formulaire avec des entrées que l'utilisateur remplira, et une fois que l'utilisateur cliquera sur le bouton de publication, je veux que le formulaire soit affiché avec l'information remplie et prête pour l'impression. La façon dont je le fais est en ce moment comme suit:ASP.NET MVC Form post

// the controller that returns the initial form using ReportCreate.aspx which creates a Html form 
public ActionResult ReportCreate() 
{ 
    return View(viewData); 
} 


// my post action which gets the information for the submitted form 
// and use the ReportPost.aspx to view a similar page as ReportCreate.aspx but with all the Html.TexBox inputs replaced with their values obtained from the submitted form  
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult ReportCreate(FormCollection form) 
{ 
    ReportFormData formData = new ReportFormData(); 

    formData.Date = form["date"]; 
    formData.Company = form["company"]; 
    formData.SiteNameA = form["siteNameA"]; 
    formData.SiteNameB = form["siteNameB"]; 
    formData.FreqBand = form["freqBand"]; 
    formData.FileNumber = form["fileNumber"]; 
    formData.ResponseDate = form["responseDate"]; 

    formData.SiteAddressA = form["siteAddressA"]; 
    formData.SiteAddressB = form["siteAddressB"]; 

    this.TempData.Add("viewData", viewData); 

    return View("ReportPost", formData); 
} 

Ce que je n'aime pas de cette façon, est que je dois ASPX pages (ReportCreate.aspx & ReportPost.aspx) que je dois Restez similaire et modifiez-les tous les deux si j'ai besoin de modifier le look du formulaire. Je pense qu'il devrait y avoir une façon plus professionnelle de gérer ce problème commun. J'ai essayé de le rechercher en ligne, mais je n'ai rien pu obtenir. S'il vous plaît, faites-moi savoir. Merci beaucoup d'avance.

Répondre

0

Si toute la mise en forme est la même que la zone de texte doit être une étiquette, utilisez simplement une condition dans votre vue pour déterminer si vous devez afficher une zone de texte ou non.

<%if(model.ReadOnly){%><%=Html.LabelFor(m => m.Company)%><%else%><%=Html.TextBoxFor(m => m.Company)%><%}%> 
2

Si vous souhaitez afficher les données affichées dans la même forme il suffit d'utiliser la même page ASPX que lorsque vous avez créé les données.

Cependant, la manière habituelle est d'avoir une page pour:

  • Créer - à l'entrée des valeurs première fois et après une entrée réussie redirect à
  • Détails - où les données ne sont pas une forme mais texte normal

Si vous avez besoin de modifier les données utilisent

  • Modifier

Pour afficher une collecte de données utilisent

  • Index

Un autre point à noter est que vous ne devez utiliser définir manuellement toutes les valeurs de la forme à votre classe ReportFormData , à la place, faites:

[HttpPost] 
public ActionResult Create(ReportFormData formData) 
{ 
    if(!ModelState.Isvalid){ 
    return View(formData); 
    } 
    else 
    { 
    RedirectToAction("Index"); 
    } 
} 
+0

+1 pour suggérer l'utilisation d'un modèle de vue. –

+0

merci, je ne vois pas comment les entrées de mon formulaire se lieront aux variables d'instance dans mon objet ReportFormData. Ai-je besoin de faire quelque chose de spécial, ou cela arrivera automatiquement? Je l'ai essayé et ça ne semble pas fonctionner. –

+0

Assurez-vous que l'attribut name est correctement défini sur tous les éléments d'entrée. liera "Microsoft" à la propriété de la société sur votre instance formdata. – Henrik