1
<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”密码?

4

1 回答 1

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

希望这可以帮助。

于 2013-06-20T05:17:14.093 回答