2010-05-23 54 views
0

感謝Darin Dimitrov's suggestion我在理解好的MVC代碼方面進一步了一大步,但我遇到了一些使其更加靈活的問題。在MVC2中爲存儲過程製作靈活的C#代碼

我實現了Darin的建議解決方案,它對於單個控制器非常適用。不過,我在實現它時遇到了一些麻煩,具有一定的靈活性我在尋找的是這個;

  • 爲了能夠在JSON

而不是使用進行動態的列名 「列1: '值',......」 和 「列2: '值',... 「對於 一個存儲過程,」動物「和 」類型「在json內部,我想用 作爲示例」id:'value',...「和」place:'value'...「 「在另一個(內部格式爲json )。

  • 爲了能夠進行動態金額列的依賴其調用存儲過程

一些存儲過程,我會想 讀取超過2行,有沒有一個 聰明的方式來完成這一點?

  • 爲了能夠從數據庫中做數字(浮點和整數)行的JSON內呈現不帶引號

這樣的(姓名和年齡);

{ 
    Column1: "John", 
    Column2: 53 
}, 

我會非常感謝任何意見和建議/代碼示例,我可以在這裏。即使不完美的。

回答

1

如何使用匿名對象?因此,例如你可以在你的倉庫返回System.Object的方法:

public interface IRepository 
{ 
    object GetModel(int id); 
} 

然後根據您呼叫你會返回一個不同的匿名類型的存儲的過程:

public class RepositorySql : IRepository 
{ 
    public object GetModel(int id) 
    { 
     // TODO: Call a stored procedure and depending on the procedure you are 
     // calling return a different anonymous type, for example: 
     return new 
     { 
      Column1 = "value1", 
      Column2 = "value2", 
     } 
    } 
} 

最後是你的控制器:

public ActionResult Index(int id) 
{ 
    var model = _repository.GetModel(id); 
    return Json(model); 
} 

現在當然,使用此操作的視圖需要知道JSON對象中有哪些列。我建議你使用一些基本類型而不是System.Object,其他模型可以從中派生出來幷包含公共屬性。

我並不真正瞭解您的要求,但如果僅僅是返回一些基於存儲過程而不同的值的列表,您可以簡單地返回IEnumerable<string>

+0

感謝您再次幫助我!是的,我應該說,這些調用的重點僅僅是爲JSON數據提供大量JavaScript。 我不敢相信我沒有想到我自己,我會立即開始工作。只是爲了得到更多的建議而放棄這個開放,再次感謝Darin! – cc0 2010-05-24 09:26:49