ASP.NET强制动态生成的控件被视为新的

时间:2017-06-14 11:59:09

标签: c# asp.net database entity-framework

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

我们假设我有以下两种模式:

Bottle {
    Name = "Foo"
    BottleType = BottleType {
        Name = "Unicorn Bottle"
    }
}

这些模型的可能值为

Bottle

网络用户界面会显示一个包含两个条目的下拉列表,一个用于BottleType,另一个用于Bottle。如果更改了选择,将根据模型的属性生成新控件。

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

  1. label,text =“BottleId”
  2. 文本框已禁用,text =“(自动)” - 因为其值将在数据库中自动生成
  3. label,text =“Name”
  4. 文本框
  5. ...
  6. 另外,如果需要输入,panel.controls.clear()将依赖于每个控件的标签。

    现在谈论我的问题;当我更改下拉列表的选定索引时,将使用 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 | } 删除控件。然后,将为所选模型生成新控件。

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

    这是一段代码剪切

    l.Text

    在第2行之后,bar等于l.Text(就像它应该的那样)。但是如果之前的模型具有相同名称的属性,它会将第6行之后bar (mandatory)的值更改为bar (mandatory) (mandatory)(这是之前模型的标签值),然后将在第10行后生成Guid.NewGuid().ToString()

    长篇故事,简短的问题:我可以强制asp.net将生成的控件视为新的吗?

    我尝试在每次使用<?php function __construct() { parent::__construct(); if(!$this->session->userdata('name')) { redirect('logins'); } } ?> 生成标签时为标签指定一个唯一ID,以指示不同的实例,但这似乎不起作用。

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

1 个答案:

答案 0 :(得分:0)

我自己设法解决了问题,虽然我不确定如何。

我在问题中提到过,我曾尝试为每个控件分配一个唯一的ID - 这不起作用。

当我继续编码时,我需要访问生成的控件,所以我为每个元素添加了一个可预测的ID (面板,控件,标签......)。

我认为这个问题的解决方案是父面板,它现在在不同的模型中具有uniqe id,这在我的测试场景中并非如此。

这解决了这个问题。