2010-05-23 45 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