<radG:GridTemplateColumn UniqueName="MyText" DataField="MyText" HeaderText="My Text(Server.HtmlEncode)" SortExpression="MyText">
<ItemTemplate>
<%#String.Format("{0} ", Server.HtmlEncode(Eval("MyText").ToString()))%>
</ItemTemplate>
</radG:GridTemplateColumn>
这里的变量MyText是
<?xml......<password>anyvaluehere</password>"
基本上我有一个LINQ to SQL表,其中原始XML值已存储为varchar(max),然后在网页上发布。我想删除标记密码中间的值或将值替换为*****
从上面的代码我有
<%#String.Format("{0} ", Server.HtmlEncode(Eval("MyText").ToString()))%>
但我的结果最好是"<?xml......<password></password>"
或"<?xml......<password>***********</password>"
如何使用asp.net / C#清除“MyText”密码?
答案 0 :(得分:0)
你可以用一个小帮手功能
来做到这一点GridView标记。
<radG:GridTemplateColumn UniqueName="MyText" DataField="MyText" HeaderText="My Text(Server.HtmlEncode)" SortExpression="MyText">
<ItemTemplate>
<%# ObscurePassword(Eval("MyText"))%>
</ItemTemplate>
</radG:GridTemplateColumn>
代码隐藏。
//Warning: minimal code, no error catching mechanisms included.
protected string ObscurePassword(object xmlObj)
{
//var xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><main><blah>some value</blah><password>anyvaluehere</password></main>";
var xml = xmlObj.ToString();
XDocument doc = XDocument.Parse(xml);
XElement elm = doc.Descendants("password").First();
elm.Value = "*****";
//elm.ReplaceWith(new XElement("password", "*****"));
var encodedDoc = System.Web.HttpUtility.HtmlEncode(doc.ToString());
//var encodedDoc = System.Security.SecurityElement.Escape(doc.ToString());
return encodedDoc;
}
更新:如果您使用的是命名空间,即xmlns,请在查询时添加它
XNamespace xmlns = "http://yoyo.net/";
XElement elm = doc.Descendants(xmlns + "password").First();
或者
string xmlns = "http://yoyo.net/";
XElement elm = doc.Descendants(XName.Get("Stuff", xmlns)).First();
希望这有帮助。