我正在尝试查询数据库并在将其作为asp.net MVC 4中的Json对象传递给用户后显示信息。
我能想到传递它的唯一方法如下:
public JsonResult Search()
{
SqlCommand myCommand = new SqlCommand("Select * from table",
myConnection);
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
//Col1-7 are lists
Col1.Add(myReader["Column1"].ToString());
Col2.Add(myReader["Column2"].ToString());
Col3.Add(myReader["Column3"].ToString());
Col4.Add(myReader["Column4"].ToString());
Col5.Add(myReader["Column5"].ToString());
Col6.Add(myReader["Column6"].ToString());
Col7.Add(myReader["Column7"].ToString());
}
return Json(new {Col1, Col2, Col3, Col4, Col5, Col6, Col7});
}
唯一的问题是我不想为此使用繁重的客户端,并且通过这样做,而不是将数据表保存为压缩数据库,我将其保存为一堆列表。这种方法是否会破坏尝试不在客户端保存太多数据的目的(无论如何我只是不使用SqlServerCe),如果是这样,有没有更好的方法呢?
答案 0 :(得分:0)
如果您返回JsonResult,请使用:
JsonResult retVal = new JsonResult();
...
retVal.Data = new { col1 = Col1, ....};
return retVal;
如果有帮助,请告诉我。
答案 1 :(得分:0)
我不完全理解你的问题。我能说的是你不想在客户端上向用户显示太多信息吗?
在尝试回答你的问题时,我也会提出一些建议。
不要像在控制器中那样进行数据检索。而是使用服务层或存储库来恢复数据。假设您想要恢复数据库中的所有用户,那么我会这样做(只需返回您需要的内容,其余的可以省略):
public ActionResult GetAllUsers()
{
List<User> users = userService.FindAll();
var result =
from user
in users
select new[]
{
user.Id.ToString(),
user.FirstName,
user.LastName,
user.Age.ToString()
};
return Json(result, JsonRequestBehavior.AllowGet);
}
您可以将所有这些放入您的UserService类中:
SqlCommand myCommand = new SqlCommand("Select * from table", myConnection);
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
//Col1-7 are lists
Col1.Add(myReader["Column1"].ToString());
Col2.Add(myReader["Column2"].ToString());
Col3.Add(myReader["Column3"].ToString());
Col4.Add(myReader["Column4"].ToString());
Col5.Add(myReader["Column5"].ToString());
Col6.Add(myReader["Column6"].ToString());
Col7.Add(myReader["Column7"].ToString());
}
将IUserService接口注入控制器:
public class UserController : Controller
{
private readonly IUserService userService;
public UserController(IUserService userService)
{
this.userService = userService;
}
// The rest of your action methods goes here, including GetAllUsers()
}