简体   繁体   English

这些.NET控件有什么问题?

[英]What is wrong with these .NET Controls?

Code : 代码:

foreach (HtmlGenericControl div in panelCategorieGuida.Controls.OfType<HtmlGenericControl>())
{
    HiddenField hf = div.Controls.OfType<HtmlGenericControl>().LastOrDefault();
}

it says "that I can't implicitly convert HtmlGenericControl to HiddenField". 它说:“我不能将HtmlGenericControl隐式转换为HiddenField”。 Also if I wrote (HiddenField)div.Controls.OfType<HtmlGenericControl>().LastOrDefault() it doesnt works. 另外,如果我写了(HiddenField)div.Controls.OfType<HtmlGenericControl>().LastOrDefault()它也(HiddenField)div.Controls.OfType<HtmlGenericControl>().LastOrDefault()

The last element of div (which is a HtmlGenericControl) is always a HiddenField element. div的最后一个元素(是HtmlGenericControl)始终是HiddenField元素。

Why? 为什么? Where am I wrong? 我哪里错了?

不应该像

HiddenField hf = div.Controls.OfType<HiddenField>().LastOrDefault();
foreach (var div in panelCategorieGuida.Controls.OfType<HtmlGenericControl>())
{
    var hf = div.Controls.OfType<HiddenField>().LastOrDefault();
}

Your initial code just did the following: 您的初始代码仅执行以下操作:

  • filter the list to elements, which are type of HtmlGenericControl 将列表筛选为元素,这些元素是HtmlGenericControl类型
  • take the last (or default) 取最后一个(或默认)
  • cast it to HiddenField (implicit and/or explicit) 将其转换为HiddenField (隐式和/或显式)

Now: Unless the last element, which is of type HtmlGenericControl , isn't a real HiddenField you'll get the invalid cast-exception. 现在:除非最后一个元素(类型为HtmlGenericControl )不是真正的HiddenField ,否则您将获得无效的cast-exception。 You might filter the elements to HiddenField (as I did it), or rather take this code: 您可以将元素过滤到HiddenField (就像我所做的那样),或者采用以下代码:

var hf = div.Controls.OfType<HtmlGenericControl>().LastOrDefault() as HiddenField;

Which is a "safe cast" ... 这是“安全铸造” ...

I think @Pranay Rana is right. 我认为@Pranay Rana是正确的。 If you explicit cast is also failed, I think you need check whether the element you want is a hidden field. 如果您的显式转换也失败了,我认为您需要检查所需的元素是否为隐藏字段。 Also, your code has some problems. 另外,您的代码也有一些问题。 You should always do some validation before you carry on. 继续进行之前,您应该始终进行一些验证。 If not, maybe in test stage, your code running well. 如果没有,也许在测试阶段,您的代码运行良好。 But it may encounter some errors later in production. 但是在以后的生产中可能会遇到一些错误。

如果您知道这是一个HiddenField,则应该可以使用:

HiddenField hf = div.Controls.LastOrDefault() as HiddenField;

i think you should first check if it's a hidden field or not like this 我认为您应该首先检查它是否是隐藏字段

if( div.Controls.OfType<HtmlGenericControl>().LastOrDefault() is HiddenField)
{
  /// rest of the processing code 
}

which might resolve your problem, because the element you are getting might not be hiddenfield element 这可能会解决您的问题,因为您获得的元素可能不是hiddenfield元素

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM