2011-06-06 29 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

相關問題