2011-06-06 85 views
0

我想将我的控制器中的方法的变量传递给模型中的方法。由于模型中的方法需要一个参数(之前已经设计过),所以我无法将我的变量作为参数传递给模型中的方法。而且,这个模型中的方法也被其他控制器调用,所以如果我改变参数,我也必须改变所有的控制器,这将是一个乏味的任务。 我一直在尝试的是 - 我创建了一个MyVariableClass并声明了一个属性。然后我实例化该类并将属性字符串设置为我想要传递的变量。现在,在我的Model的方法中,我再次实例化了相同的MyVariableClass,但是当我这样做时,变量的值被设置为null。我现在所拥有的代码是 -将属性从控制器传递到模型

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); 
    } 

和MyVariableClass

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

,并在我的模型方法

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 .... 
    } 

任何人有解决这个?提前致谢!

+0

您似乎没有将'MyVariableClass'实例(即'params')传递给任何东西。相反,你创建两次,一次在你的控制器中,一次在你的模型中。那该如何完成任何事情? (另外,你的模型实际上不应该有行为 - 方法 - 它们是为了保存数据,而不是用于随机位代码的存储库,把GetItemInformation行为放在其他地方,它没有业务存在于模型中。 ) – 2011-06-06 19:41:45

+0

是啊!其实我的问题是我如何将MyVariableClass的实例传递给getItemInformation而不更改GetItemInformation的当前结果? – ACS 2011-06-06 20:26:17

回答

1

任何为什么继承你的模型和覆盖GetItemInformation方法不起作用的原因?或者,更简单一点,为什么不将超过GetItemInformation方法与一个需要两个字符串的方法?你的其他控制器仍然可以使用只有一个字符串的控制器。

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

我不使用重载的唯一原因是为了避免重复两种方法的代码。我只需要有变量值,以便我可以检查条件并编写我的LINQ。所以,如果我为一行代码重载GetItemInformation,我必须重复我的整个方法。 – ACS 2011-06-06 20:16:50

+0

@ACS请参阅我添加的代码。你真的不需要重复你的整个方法。 – 2011-06-07 21:10:54

相关问题