我正在开发基于实体框架的数据操作的web ui。
我们假设我有以下两种模式:
Bottle {
Name = "Foo"
BottleType = BottleType {
Name = "Unicorn Bottle"
}
}
这些模型的可能值为
Bottle
网络用户界面会显示一个包含两个条目的下拉列表,一个用于BottleType
,另一个用于Bottle
。如果更改了选择,将根据模型的属性生成新控件。
例如,如果选择mandatory
,将生成6个控件 - 3个标签和3个输入框:
另外,如果需要输入,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,以指示不同的实例,但这似乎不起作用。
我找不到关于这个主题的任何相关问题,因为大多数时候人们想要重新生成控件并保留它们的值,但不是我的情况。
答案 0 :(得分:0)
我自己设法解决了问题,虽然我不确定如何。
我在问题中提到过,我曾尝试为每个控件分配一个唯一的ID - 这不起作用。
当我继续编码时,我需要访问生成的控件,所以我为每个元素添加了一个可预测的ID (面板,控件,标签......)。
我认为这个问题的解决方案是父面板,它现在在不同的模型中具有uniqe id,这在我的测试场景中并非如此。
这解决了这个问题。