【发布时间】:2011-06-15 19:12:09
【问题描述】:
我正在开发一个自定义控件,需要将下拉列表显示为复合控件。
下拉列表是从 Rest Web 服务中填充的。我面临的问题是下拉列表只有 DataTextField 和 DataValueField 但我需要一种在控件中存储更多值的方法,即我需要访问所选项目的其他几个属性。
最好的方法是什么?
这是我目前的代码:
[ValidationProperty("SelectedValue")]
public class SelectSurveyControl : Panel
{
private DropDownList ddlSurveys;
public string SelectedSurveyId
{
get
{
return SelectedValue;
}
}
public string SelectedSurveyJavascriptEmbedCode
{
get
{
return this.ddlSurveys.SelectedItem.Attributes[""];
}
}
public string SelectedValue
{
get
{
return ddlSurveys.SelectedValue;
}
set
{
if (ddlSurveys == null)
{
ddlSurveys = new DropDownList();
}
ddlSurveys.SelectedValue = value;
}
}
protected override void OnLoad(EventArgs e)
{
base.OnInit(e);
if (ddlSurveys == null)
{
ddlSurveys = new DropDownList();
}
IList<Survey> surveys = GetSurveys();
this.ddlSurveys.DataSource = surveys;
this.ddlSurveys.DataTextField = "title";
this.ddlSurveys.DataValueField = "id";
this.ddlSurveys.DataBind();
ddlSurveys.SelectedValue = this.SelectedValue;
ddlSurveys.CssClass = "umbEditorTextFieldMultiple charlimit";
ddlSurveys.Attributes.Add("SurveyId", SelectedSurveyId);
ddlSurveys.Attributes.Add("JavascriptEmbedingCode", SelectedSurveyId);
this.Controls.Add(ddlSurveys);
}
public IList<Survey> GetSurveys()
{
...
}
}
【问题讨论】:
-
stackoverflow.com/questions/2001521/… 可能会为您提供解决此问题的起点。
-
我如何在 .Net 代码中实现它?
-
您需要额外的数据在客户端可用还是在服务器上进行处理?
-
服务器端处理。我需要存储第三个值,我将存储到数据库中,这意味着我不必再次调用其余 Web 服务。
-
您可以缓存来自 Web 服务的项目并使用 Id (SelectedValue) 从缓存中检索正确的调查实例。
标签: asp.net user-controls controls asp.net-2.0