我正在开发的软件使用 ASP.NET MVC 和 Telerik Extensions for ASP.NET MVC 框架。
我遇到的问题是,如果 Telerik 网格使用 ajax 绑定(bind),则很容易将 JSON 格式的意外数据发送到客户端浏览器。
例如,当与使用 ajax 绑定(bind)的 Telerik Grid View 一起使用时,以下操作将导致所有 Client 类的属性被序列化为 JSON。
模型类:
public class Client
{
public int ClientId {get; set; }
public string Name { get; set; }
public string Address { get; set; }
...
public string SocialSecurityNumber { get; set; }
public string BankAccountNumber { get; set; }
}
Controller :
[GridAction]
public ActionResult Index()
{
IEnumerable<Client> clients = clientRepository.GetClients();
return View(new GridModel(clients));
}
查看:
@Html.Telerik().Grid<Client>()
.Columns(columns =>
{
columns.Bound(client => client.ClientId);
columns.Bound(client => client.Name);
columns.Bound(client => client.Address);
}
.DataBinding(db => db.Ajax().Select("Index"))
尽管 SocialSecurityNumber 和 BankAccountNumber 未绑定(bind)到网格,但 JSON 将包含它们,并且可以使用 Firebug 等开发人员工具查看数据。
JSON:
{
"data":[
{
"ClientId":101,
"Name":"Matt",
"Address":"Example Road 12",
...
"SocialSecurityNumber":"1234-5678"
"BankAccountNumber":"12345678",
},
{
"ClientId":102,
"Name":"Karen",
"Address":"Example Road 27",
...
"SocialSecurityNumber":"5678-1234"
"BankAccountNumber":"87654321",
}
],
"total":2
}
您会使用什么解决方案来确保只有预期的属性被序列化并发送到客户端浏览器?
请您参考如下方法:
创建一个包含您想要公开的确切属性的 ViewModel,并使用它代替您当前使用的对象:
public class ClientModel
{
public int ClientId {get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
var model = from c in clients
select new ClientModel {
...
};
return View(new GridModel(model));
