var grid = $("#grid").kendoGrid({ dataSource: dataSource, pageable: true, height: 430, toolbar: ["create"], columns: [ "ProductName", { field: "ID", title: "Product ID", width: "100px" }, { field: "UnitPrice", title: "Unit Price", format: "{0:c}", width: "100px" }, { field: "UnitsInStock", title: "Units In Stock", width: "100px" }, { field: "Discontinued", width: "100px" }, { command: ["edit", "destroy"], title: " ", width: "172px" } ], editable: "inline" }).data("kendoGrid");
如何加密列产品ID在Kendo ui网格用户看不到我的真实ID?我使用ASP. NET MVC 5。
谢谢你!
在将数据加载到代码中之前先注册数据,然后再绑定数据。
要做到这一点,请使用encrpyt类,如下所示
public class DataEncryptor
{
TripleDESCryptoServiceProvider symm;
#region Factory
public DataEncryptor()
{
this.symm = new TripleDESCryptoServiceProvider();
this.symm.Padding = PaddingMode.PKCS7;
}
public DataEncryptor(TripleDESCryptoServiceProvider keys)
{
this.symm = keys;
}
public DataEncryptor(byte[] key, byte[] iv)
{
this.symm = new TripleDESCryptoServiceProvider();
this.symm.Padding = PaddingMode.PKCS7;
this.symm.Key = key;
this.symm.IV = iv;
}
#endregion
#region Properties
public TripleDESCryptoServiceProvider Algorithm
{
get { return symm; }
set { symm = value; }
}
public byte[] Key
{
get { return symm.Key; }
set { symm.Key = value; }
}
public byte[] IV
{
get { return symm.IV; }
set { symm.IV = value; }
}
#endregion
#region Crypto
public byte[] Encrypt(byte[] data) { return Encrypt(data, data.Length); }
public byte[] Encrypt(byte[] data, int length)
{
try
{
// Create a MemoryStream.
var ms = new MemoryStream();
// Create a CryptoStream using the MemoryStream
// and the passed key and initialization vector (IV).
var cs = new CryptoStream(ms,
symm.CreateEncryptor(symm.Key, symm.IV),
CryptoStreamMode.Write);
// Write the byte array to the crypto stream and flush it.
cs.Write(data, 0, length);
cs.FlushFinalBlock();
// Get an array of bytes from the
// MemoryStream that holds the
// encrypted data.
byte[] ret = ms.ToArray();
// Close the streams.
cs.Close();
ms.Close();
// Return the encrypted buffer.
return ret;
}
catch (CryptographicException ex)
{
Console.WriteLine("A cryptographic error occured: {0}", ex.Message);
}
return null;
}
public string EncryptString(string text)
{
return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(text)));
}
public byte[] Decrypt(byte[] data) { return Decrypt(data, data.Length); }
public byte[] Decrypt(byte[] data, int length)
{
try
{
// Create a new MemoryStream using the passed
// array of encrypted data.
MemoryStream ms = new MemoryStream(data);
// Create a CryptoStream using the MemoryStream
// and the passed key and initialization vector (IV).
CryptoStream cs = new CryptoStream(ms,
symm.CreateDecryptor(symm.Key, symm.IV),
CryptoStreamMode.Read);
// Create buffer to hold the decrypted data.
byte[] result = new byte[length];
// Read the decrypted data out of the crypto stream
// and place it into the temporary buffer.
cs.Read(result, 0, result.Length);
return result;
}
catch (CryptographicException ex)
{
Console.WriteLine("A cryptographic error occured: {0}", ex.Message);
}
return null;
}
public string DecryptString(string data)
{
return Encoding.UTF8.GetString(Decrypt(Convert.FromBase64String(data))).TrimEnd('\0');
}
#endregion
}
并像这样使用它:
string message="A very secret message here.";
DataEncryptor keys=new DataEncryptor();
string encr=keys.EncryptString(message);
// later
string actual=keys.DecryptString(encr);
可以对列使用kendo grid client模板,而不是直接加密,在该列中,您将Id值传递给javascript函数,然后使用算法对其进行加密并返回。差不多。
columns.Bound(client => client.Id).ClientTemplate("#=Encrypt(Id)#");
而且
<script>
function Encrypt(id)
{
// Logic to Encrypt ID
return encryptedID.toString();
}
</script>
如果这只是为了显示给用户那么这个解决方案的工作原理
第二种解决方案是只隐藏列(我的意思是没有必要向用户显示ID)
如果您觉得这有帮助,请标记为答案
我对某些字段的验证有问题。我只想验证几个字段,其他字段不应该验证。在我的Email字段中,我启动了一个函数来检查格式是否正确,但其他字段只是设置为验证。任何帮助都将不胜感激。 使用此代码,在尝试保存/更新时将验证所有字段。我不想验证分机或电话号码。
嗨,我正在尝试做剑道网格,但它不工作,显示网格,但没有显示数据。我不知道怎么了。我不知道parametersMap是怎么工作的。请帮帮我。 控制器 这是剧本 Json数据返回:http://localhost:53232/Home/GetGeo?id=5
我想在我的剑道ui网格中进行内联编辑。数据绑定似乎工作正常,但当我在编辑某些内容后单击“更新”按钮时,范围会得到更新,但编辑对话框不会消失。如果单击另一个编辑按钮,它将进入失效状态。毕竟,只有当我至少提供一个伪函数作为k-save时,它才会更新作用域。出于某种原因,单击“取消”按钮确实会更新范围。所以“取消”按钮实现了我对“更新”按钮的期望。 您可能会看到,我想更新客户端的本地范围,而不是向任何服
我想根据数据在我的应用程序中的所有网格中设置列对齐属性。 如果列是十进制/数字类型,是否有一种方法可以将列对齐到中心,否则为所有其他类型向左对齐。 我没有列架构,我需要在呈现数据之前确定它。
我使用Telerik的演示页面上显示的编辑网格。编辑网格后,我希望网格刷新。编辑网格后,网格是否有调用的任何事件? 我试图使用数据绑定事件。在本例中,我读取数据源,但它告诉我刷新网格是一个无限循环。我试图使用saveChanges事件,但它不起作用。
我在以角度加载网格的保存状态时遇到一些问题。 这是网格HTML: 稍后,我启动Http调用和$scope。网格选项已填充,网格工作正常。 然后通过以下方式保存网格的状态: 这很好,当我在控制台中打印输出时。看起来是这样的: {“dataSource”:{“schema”:{“data”:“data”},“transport”:{},“serverSorting”:true,“table”:null