2011-06-06 11 views
0

J'essaie de transmettre une variable d'une méthode de mon contrôleur à une méthode dans un modèle. Puisque la méthode dans le Modèle prend un argument (qui a été conçu plus tôt), je ne peux pas passer ma variable comme un argument à la méthode dans le Modèle. Et aussi, la méthode dans ce modèle est appelée par d'autres contrôleurs aussi, donc si je change l'argument, je dois aussi changer tous les contrôleurs, ce qui serait une tâche fastidieuse. Ce que j'ai essayé jusqu'ici est: j'ai créé une classe MyVariableClass et déclaré une propriété. Ensuite, j'ai instancié cette classe et défini la chaîne de propriété à la variable que je voulais transmettre. Maintenant, dans la méthode de mon modèle, j'ai encore instancié la même MyVariableClass, mais quand je l'ai fait, la valeur de la variable a été définie sur null. Le code que j'ai est en ce moment -Passer la propriété du contrôleur au modèle

public ActionResult ItemInformation(string id) 
    { 
     //Pass a string to MyVariable 
     MyVariableVClass params = new MyVariableClass(); 
     params.myVariable = "abc"; 

    //This is what My Model is taking as an argument(id), and I don't want to 
    //pass mYvariable along with that argument because it will break other controllers 
    // too which calls this method 
    var itemInformation = _repository.GetItemInformation(id); 
    return View(itemInformation); 
    } 

et

MyVariableClass
public class MyVariableClass 
    { 
    public string myVariable { get; set; } 
    } 

et la méthode dans mon modèle

public IList<Items> GetItemInformation(string itemId) 
    { 

     MyVariableClass webType = new MyVariableClass(); 
     var _params = webType.myVariable; 
     //Check this variable and perform database query 
     if (_params =="this") 
     { 
     var query = myFirstQuery; 
     } 
     else 
     { 
     var query = mySecondQuery; 
     } 
    //return .... 
    } 

Tout le monde a une solution à cela? Merci d'avance!

+0

Vous ne semblez pas passer votre instance de 'MyVariableClass' (c'est-à-dire' params') à quelque chose. Au lieu de cela, vous le créez deux fois, une fois dans votre contrôleur et une fois dans votre modèle. Comment cela est-il censé accomplir quoi que ce soit? (De plus, vos modèles ne devraient pas avoir de comportement - méthodes - ils sont destinés à contenir des données, pas à être des dépôts pour des morceaux de code aléatoires.) Mettez ce comportement 'GetItemInformation' ailleurs. –

+0

Ouais! En fait, ma question était de savoir comment passer l'instance de MyVariableClass à getItemInformation sans changer les arguments actuels de GetItemInformation? – ACS

Répondre

1

Une raison pour laquelle le sous-classement de votre modèle et le remplacement de la méthode GetItemInformation ne fonctionneraient pas? Ou, encore plus simple, pourquoi ne pas surcharger la méthode GetItemInformation avec une méthode qui prend deux chaînes? Vos autres contrôleurs peuvent toujours utiliser celui qui ne prend qu'une seule chaîne.

public IList<Items> GetItemInformation(string itemId, MyVariableClass webType) 
    { 

     var _params = webType.myVariable; 
     //Check this variable and perform database query 
     if (_params == "this") 
     { 
     var query = myFirstQuery; 
     } 
     else 
     { 
     var query = mySecondQuery; 
     } 
    //return .... 
    } 

    public IList<Items> GetItemInformation(string itemId) 
    { 
    MyVariableClass fauxType = new MyVariableClass(); 
    fauxType.myVariable = "not this"; 

    return GetItemInformation(itemId, fauxType); 
    } 
+0

La seule raison pour laquelle je n'utilise pas de surcharge est d'éviter le code en double sur deux méthodes. J'ai juste besoin d'avoir la valeur de la variable pour pouvoir vérifier la condition et écrire mon LINQ. Donc, si je surcharge GetItemInformation, pour une seule ligne de code, je dois répéter toute ma méthode. – ACS

+0

@ACS s'il vous plaît voir le code que j'ai ajouté. Vous n'avez vraiment pas besoin de répéter toute votre méthode. –

Questions connexes