aspx页面使用gridTemplateColumn String.Format并且需要替换或掩码值(如果存在)

时间:2013-06-19 21:21:07

标签: c# asp.net gridview

<radG:GridTemplateColumn UniqueName="MyText" DataField="MyText" HeaderText="My Text(Server.HtmlEncode)" SortExpression="MyText">
    <ItemTemplate>
        <%#String.Format("{0}&#160;", Server.HtmlEncode(Eval("MyText").ToString()))%>
    </ItemTemplate>
</radG:GridTemplateColumn>

这里的变量MyText是

<?xml......<password>anyvaluehere</password>"

基本上我有一个LINQ to SQL表,其中原始XML值已存储为varchar(max),然后在网页上发布。我想删除标记密码中间的值或将值替换为*****

从上面的代码我有

<%#String.Format("{0}&#160;", Server.HtmlEncode(Eval("MyText").ToString()))%>

但我的结果最好是"<?xml......<password></password>""<?xml......<password>***********</password>"

如何使用asp.net / C#清除“MyText”密码?

1 个答案:

答案 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();

希望这有帮助。