代码:
foreach (HtmlGenericControl div in panelCategorieGuida.Controls.OfType<HtmlGenericControl>())
{
HiddenField hf = div.Controls.OfType<HtmlGenericControl>().LastOrDefault();
}
它说“我不能隐式地将HtmlGenericControl转换为HiddenField”。此外,如果我写(HiddenField)div.Controls.OfType<HtmlGenericControl>().LastOrDefault()
它也不起作用。
div的最后一个元素(也就是HtmlGenericControl)总是一个HiddenField元素。
为什么呢?我哪里错了?
答案 0 :(得分:2)
不应该像
HiddenField hf = div.Controls.OfType<HiddenField>().LastOrDefault();
答案 1 :(得分:1)
foreach (var div in panelCategorieGuida.Controls.OfType<HtmlGenericControl>())
{
var hf = div.Controls.OfType<HiddenField>().LastOrDefault();
}
您的初始代码只是执行了以下操作:
HtmlGenericControl
HiddenField
(隐式和/或显式)现在:除非最后一个HtmlGenericControl
类型的元素不是真正的HiddenField
,否则你将获得无效的强制转换异常。您可以将元素过滤到HiddenField
(就像我做的那样),或者更确切地说是这个代码:
var hf = div.Controls.OfType<HtmlGenericControl>().LastOrDefault() as HiddenField;
这是一个“安全演员”......
答案 2 :(得分:1)
我认为@Pranay Rana是对的。 如果你的显式转换也失败了,我认为你需要检查你想要的元素是否是隐藏字段。 此外,您的代码有一些问题。在继续之前,您应该始终进行一些验证。如果没有,也许在测试阶段,您的代码运行良好。但它可能会在生产后期遇到一些错误。
答案 3 :(得分:0)
如果你知道它是一个HiddenField,这应该可行:
HiddenField hf = div.Controls.LastOrDefault() as HiddenField;
答案 4 :(得分:0)
我认为你应该首先检查它是否是一个隐藏的字段,或者不是这样的
if( div.Controls.OfType<HtmlGenericControl>().LastOrDefault() is HiddenField)
{
/// rest of the processing code
}
可能会解决您的问题,因为您获得的元素可能不是隐藏字段