gpt4 book ai didi

c# - 用于短期内存的 ASP.NET 自定义控件

转载 作者:行者123 更新时间:2023-11-30 18:42:33 25 4
gpt4 key购买 nike

我是 Web 编程的新手,而且我仍在努力应对服务器具有糟糕的短期内存这一事实,当您看到它时忘记了屏幕上显示的内容。

我目前正在尝试创建一个自定义控件,允许您在中继器内编辑数据字段。根据字段的格式(ElementFormat 属性),应生成文本框或下拉列表。在我的页面标记中,我有:

<custom:EditFieldControl ID="EditFieldControl" 
runat="server"
ElementId='<%#Eval("Id")%>'
ElementValue='<%#Eval("Value")%>'
ElementFormat='<%#Eval("Format")%>'
Visible="false" />

控制代码隐藏看起来像这样:

public class EditFieldControl : WebControl
{
private TextBox textBox;
private DropDownList dropDownList;

protected override void CreateChildControls()
{
switch (The Format of the field)
{
case "Text":
{
textBox = new TextBox
{
Text = The existing value,
CssClass = "FieldTextBox"
};
this.Controls.Add(textBox);
break;
}
case "DropDownList":
{
dropDownList = new DropDownList
{
//go get possible values from the database
CssClass = "FieldDropDown"
};
this.Controls.Add(dropDownList);
break;
}
default:
throw new ArgumentException("Invalid Format Type");
}
base.CreateChildControls();
}

public string Value
{
get
{
switch (ElementFormat)
{
case "DropDownList":
return dropDownList.SelectedValue;
default:
return textBox.Text;
}
}
}
}

问题是,当单击“保存此字段”按钮时,服务器会在中继器的那个位中查找 EditFieldControl,找到它,然后调用 value 方法,该方法会立即出错,因为它正在尝试访问不再存在的文本框或下拉列表。我的问题是,如何获取用户输入/选择的值?我想我必须在生命周期的早期重新创建控件,我只是不确定什么时候。

最佳答案

asp:Repeater 不是编辑数据的理想控件,它更多用于显示。适合编辑的是 FormView、DetailsView,在您的情况下最好的可能是 ListView 控件。您可以为显示 (ItemTemplate)、编辑 (EditItemTemplate) 和插入 (InsertItemTemplate) 定义单独的模板。 Value 属性需要一个 setter 来允许双向绑定(bind)。使用绑定(bind)而不是评估。

希望这对您有所帮助。

关于c# - 用于短期内存的 ASP.NET 自定义控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5633167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com