2010-03-09 5 views
0

Je tente d'ajouter filtre fonctionnalité qui envoie une GET demande à la même page pour filtrer les enregistrements dans ma table.asp.net MVC ActionMethod faisant exception null le paramètre

Le problème que j'ai est que la zone de texte se plaint de référence d'objet nul lorsqu'un paramètre n'est pas passé. Par exemple, lorsque la personne voit la page pour la première fois, l'URL est '/ mycontroller/myaction /'. Puis, quand ils appliquent un filtre et soumettre le formulaire, il devrait être quelque chose comme « MyController/myaction? Name = ... »

Il est évident que le problème vient du moment où la valeur du nom n'a pas été passé (null) est essayant toujours d'être lié à la zone de texte 'nom'. Des suggestions sur ce que je devrais faire concernant ce problème?

MISE À JOUR J'ai essayé de placer l'attribut DefaultValue mais je suppose cela ne concerne que les valeurs de la route et non interroger les valeurs de chaîne ActionResult MonAction ([DefaultValue (« »)] Nom de chaîne)

//Action - /mycontroler/myaction 
ActionResult MyAction(string name) 
{ 
    ...do stuff 
} 

//View 
<div id="filter"> 
    <% Html.BeginForm("myaction", "mycontroller", FormMethod.Get); %> 
    Name: <%= Html.TextBox("name") %> 
    .... 
</div> 
<table>...my list of filtered data 

Répondre

0

décidé t o implémenter cela différemment afin que la boîte de saisie postée à une autre méthode d'action qui a fait fonctionner une logique métier puis redirigée vers la page d'origine.

POST-REDIRECT-GET

-1
//Action - /mycontroler/myaction 
ActionResult MyAction(string name) 
{ 
    if (name == null) { 
     name = string.Empty; 
    } 
    ...do stuff 
} 

Ou ... ajouter une surcharge ...

//Action - /mycontroler/myaction 
ActionResult MyAction() 
{ 
    return MyAction(string.Empty); 
} 
+0

Je ne pense pas que cela fonctionnera comme vous ne pouvez pas définir ActionResults est avec le même nom que alors il ne saura pas quelle route pour servir. – David

+0

@David Liddle - vous pouvez totalement faire cela - tant qu'ils acceptent différents paramètres. Vous ne pouvez pas en définir deux avec la même signature, mais il est très fréquent d'avoir deux méthodes, une qui accepte le modèle et une qui n'accepte aucun paramètre. – Fenton

+0

La seule façon de procéder consiste à fournir un ActionName différent en tant qu'attribut. Mais alors vous devez utiliser des liens différents de toute façon - http://stackoverflow.com/questions/436866/can-you-overload-controller-methods-in-asp-net-mvc – David

Questions connexes