2009-01-27 8 views
3

J'ai un simple formulaire sur une page vue, mis en œuvre en tant que contrôle utilisateur, qui ressemble à ceci:La mise en œuvre formulaires dans ASP.net MVC

<%=Html.BeginForm("List", "Building", FormMethod.Post) %> 

//several fields go here 

<%Html.EndForm(); %> 

Il y a deux problèmes que je voudrais résolus, le premier est que je voudrais que la méthode de contrôleur qui reçoit ceci prenne un paramètre de type du contrôle d'utilisateur. L'objectif est d'éviter de placer tous les champs du formulaire dans la liste des paramètres de la méthode. La méthode du contrôleur ressemble actuellement à ceci:

[AcceptVerbs("Post")] 
    public ActionResult List(string capacityAmount) 
    { 
     ProfilerDataDataContext context = new ProfilerDataDataContext(); 
     IEnumerable<Building> result = context.Buildings.OrderBy(p => p.SchoolName); 
     ViewData["Boroughs"] = new SelectList(Boroughs.BoroughsDropDown()); 

     return View(result); 
    } 

Le reste des champs du formulaire sera utilisé pour effectuer une recherche contre le type de bâtiments.

La forme des messages bien, je peux chercher sur la capacité de la façon que vous attendez, mais je peux sentir la laideur en avant que j'ajoute des paramètres à la recherche. Deuxièmement, le plus petit problème est que lorsque la page rend la balise BeginForm rend la chaîne "System.Web.Mvc.Form" à la page. Comment puis-je faire disparaître cela?

Répondre

6

1) Utilisation FormCollection comme argument:

public ActionResult List(FormCollection searchQuery) 

Maintenant, vous pouvez itérer le FormCollection et obtenir des termes de recherche clés/valeur de votre formulaire de recherche.

2) Retirez le "=" de BeginForm:

<% Html.BeginForm("List", "Building", FormMethod.Post) %> 

Cela dit, vous should really be using, euh ... en utilisant:

<% using (Html.BeginForm("List", "Building", FormMethod.Post)) { %> 
<% } %> 
+0

J'utilise votre suggestion d'utilisation, mais la méthode du contrôleur ne se déclenche jamais. Il me manque quelque chose d'autre ... – KevDog

+0

Que se passe-t-il lorsque vous soumettez? –

+0

Si rien ne se passe, alors je regarderais attentivement ce qui est soumis au serveur. J'utilise généralement firebug pour cela. Si le formulaire ne soumet rien ou la mauvaise chose, vérifiez votre HTML rendu. –

0

Si je comprends bien votre question, vous utiliser l'aide html et créer des entrées nommées:

<%=Html.TextBox("building.FieldNumber1")%> 
<%=Html.TextBox("building.FieldNumber2")%> 

Vous devriez être en mesure d'accéder aux données en utilisant:

public ActionResult List(Building building) 
{ 
    ... 
    var1 = building.FieldNumber1; 
    var2 = building.FieldNumber2; 
    ... 
} 

et si votre action est de faire deux choses différentes selon si le formulaire est soumis:

public ActionResult List() 
{ 
    //some code here 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult List(Building building) 
{ 
    ... 
    var1 = building.FieldNumber1; 
    var2 = building.FieldNumber2; 
    ... 
} 
0

si quelqu'un est sceptique quant à l'ensemble « utilisant » pattern avec Html.BeginForm - rendons compte que les IDE est assez intelligent pour correspondre à l'ouverture '{' avec la fin '}' qui le rend très facile de voir où votre formulaire commence et se termine.

Également <% Html.EndForm(); %> nécessite un point-virgule que je ne suis pas sûr d'aimer :)