我一直在努力将XML文件链接到下拉列表和网格视图。
我已经设法从XML文档填充一个下拉列表,然后将gridview填充到另一个,但是当尝试添加where子句时,我得到一个空引用异常并且不确定原因。我该如何解决这个问题?
XDocument xmlDoc = XDocument.Load(Server.MapPath("XMLFile.xml"));
var q = from c in xmlDoc.Descendants("Images")
where c.Attribute("PropertyId").Value == DropDownList1.SelectedValue.ToString()
select new
{
PropertyID = c.Element("ThumbUrl").Value,
};
GridView1.DataSource = q;
GridView1.DataBind();
答案 0 :(得分:6)
避免使用.Value
;可以使用一系列零安全隐式转换运算符:
var q = from c in xmlDoc.Descendants("Images")
where (string)c.Attribute("PropertyId")
== DropDownList1.SelectedValue.ToString()
select new
{
PropertyID = (string)c.Element("ThumbUrl"),
};
答案 1 :(得分:1)
其中任何一个:
c.Attribute("PropertyId")
c.Element("ThumbUrl")
DropDownList1.SelectedValue
可以为null,然后对它们调用.ToString()或.Value会给你看到的异常。
如果您不乐意通过NullReferenceExceptions捕获XML问题,那么您需要将Attribute()调用的值转换为局部变量然后对其进行测试(或者调用它两次并测试第一次调用null )。
答案 2 :(得分:0)
尝试:
条件部分where c.Attribute("PropertyId") != null && c.Attribute("PropertyId").Value == DropDownList1.SelectedValue.ToString()
和c.Element("ThumbUrl") != null
。您的代码应如下所示:
XDocument xmlDoc = XDocument.Load(Server.MapPath("XMLFile.xml"));
var q = from c in xmlDoc.Descendants("Images")
where c.Attribute("PropertyId") != null
&& c.Attribute("PropertyId").Value == DropDownList1.SelectedValue.ToString()
&& c.Element("ThumbUrl") != null
select new
{
PropertyID = c.Element("ThumbUrl").Value,
};
GridView1.DataSource = q;
GridView1.DataBind();
答案 3 :(得分:0)
from x in document.Descendants("Images")
let xElement = x.Element("PropertyId")
where xElement != null && xElement.Value == DropDownList1.SelectedValue.ToString()
select new
{
PropertyID = c.Element("ThumbUrl").Value,
};