Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET强制将动态生成的控件视为新控件_C#_Asp.net_Database_Entity Framework - Fatal编程技术网

C# ASP.NET强制将动态生成的控件视为新控件

C# ASP.NET强制将动态生成的控件视为新控件,c#,asp.net,database,entity-framework,C#,Asp.net,Database,Entity Framework,我正在开发一个基于实体框架的数据操作web ui 假设我有以下两种模型: public class Bottle { [Key] public Int32 BottleId { get; set; } [Required] [MinLength(3)] [MaxLength(128)] public String Name { get; set; } [Required] public virtual BottleType Bo

我正在开发一个基于实体框架的数据操作web ui

假设我有以下两种模型:

public class Bottle
{
    [Key]
    public Int32 BottleId { get; set; }

    [Required]
    [MinLength(3)]
    [MaxLength(128)]
    public String Name { get; set; }

    [Required]
    public virtual BottleType BottleType { get; set; }
}

public class BottleType
{
    [Key]
    public Int32 BottleTypeId { get; set; }

    [Required]
    [MinLength(3)]
    [MaxLength(128)]
    public String Name { get; set; }

    public virtual ICollection<Bottle> Bottles { get; set; }
}
web ui将显示一个下拉列表,其中包含两个条目,一个用于
瓶子
,另一个用于
瓶子类型
。如果更改了选择,将根据模型的特性生成新控件

例如,如果选择了
瓶子
,将生成6个控件-3个标签和3个输入框:

  • 标签,text=“瓶装ID”
  • textbox已禁用,text=“(自动)”-因为其值将在数据库中自动生成
  • 标签,text=“名称”
  • 文本框
  • 此外,如果需要输入,
    强制
    将附加到每个控件的标签上


    现在谈论我的问题;当我更改下拉列表的选定索引时,将使用
    panel.controls.clear()
    删除控件。之后,将为所选模型生成新控件

    我不确定问题的原因是什么,可能是页面上控件的“位置”导致asp.net将其视为“相同”

    这是一个被截取的代码

     1 |  Panel p = new Panel();
     2 |  Label l = new Label
     3 |            {
     4 |                Text = "bar" // this would be the name of the property
     5 |            };
     6 |  p.Controls.Add(l);
     7 |  if ( ... required check ... )
     8 |  {
     9 |      // is required
    10 |      l.Text += " (mandatory)";
    11 |  }
    
    在第2行之后,
    l.Text
    等于
    bar
    (就像它应该是的那样)。但是,如果之前的模型具有同名的属性,它会将第6行后面的
    l.Text
    的值更改为
    bar(强制)
    (这是之前模型的标签值),这将导致第10行后面的
    bar(强制)(强制)


    长话短说:我可以强制asp.net将生成的控件视为新控件吗?

    每次使用
    Guid.NewGuid().ToString()
    生成标签时,我都尝试给它一个唯一的id,以指示不同的实例,但这似乎不起作用


    我找不到关于这个主题的任何相关问题,因为大多数时候人们希望重新生成控件并保留它们的值。。但我的情况并非如此。

    我自己设法解决了这个问题,尽管我不知道如何解决

    我在问题中提到,我曾尝试为每个控件分配一个唯一的id,但没有成功

    当我继续编码时,我发现我需要访问生成的控件,因此我为每个元素添加了一个可预测的id(面板、控件、标签等等)

    我假设这个问题的解决方案是父面板,它现在在不同的模型中有一个uniqe id,这在我的测试场景中不是这样的


    这就解决了问题。

    我自己设法解决了问题,尽管我不知道如何解决

    我在问题中提到,我曾尝试为每个控件分配一个唯一的id,但没有成功

    当我继续编码时,我发现我需要访问生成的控件,因此我为每个元素添加了一个可预测的id(面板、控件、标签等等)

    我假设这个问题的解决方案是父面板,它现在在不同的模型中有一个uniqe id,这在我的测试场景中不是这样的

    这就解决了问题

     1 |  Panel p = new Panel();
     2 |  Label l = new Label
     3 |            {
     4 |                Text = "bar" // this would be the name of the property
     5 |            };
     6 |  p.Controls.Add(l);
     7 |  if ( ... required check ... )
     8 |  {
     9 |      // is required
    10 |      l.Text += " (mandatory)";
    11 |  }