System.NotSupportedException:从XML中删除节点节点时

时间:2018-03-30 15:45:15

标签: c# .net xml linq linq-to-xml

我有一个绑定到function openTab(tabName) { var targetTab, activeTab; // Get the div: targetTab = document.getElementById(tabName); // If it is the active tab, return: if(targetTab.style.display.className == "visible"); return; // No, it is not the active tab: document.getElementsByClassName("visible")[0].className = "invisible"; // Make the target tab visible: document.getElementById(tabName).className = "visible"; } 的XML。在网格视图列中,我有一个删除行的按钮。但我一直在说:

  

System.NotSupportedException:不支持指定的方法。

GridView

我正在尝试编辑的XML:

protected void Remove(string itemValue)
{
    XDocument doc = XDocument.Load(Server.MapPath("~/ReportConfig.xml"));
    doc.Descendants("Report")
          .Where(p => (string)p.Attribute("ID") == itemValue)
    .FirstOrDefault().Remove();
}
protected void GridView1_OnRowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName != "Delete") return;
    Remove(e.CommandArgument.ToString());
}

1 个答案:

答案 0 :(得分:1)

如果未满足Where()条件,FirstOrDefault()将返回默认值null,然后Remove()将抛出异常,因为它无法在{{null上运行1}}参考。

根据您的代码,当e.CommandArgument.ToString()"1"时,您的代码将起作用,您最终会得到XML <Reports />。但是当e.CommandArgument.ToString()是除"1"以外的任何值时,您的代码将抛出异常。将其更改为.FirstOrDefault()?.Remove()以避免例外:

doc.Descendants("Report")
   .Where(p => (string)p.Attribute("ID") == itemValue)
   .FirstOrDefault()?.Remove();