首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebForms:参考动态控制

WebForms:参考动态控制
EN

Stack Overflow用户
提问于 2015-06-15 15:52:50
回答 1查看 193关注 0票数 0

我有一个WebForms应用程序,它在页面上生成动态选择元素。我不知道会出现多少记录,因为这是基于数据库中有多少记录。下面是在Page_Load上执行的代码的一部分。

代码语言:javascript
复制
foreach (int studioId in studioIds)
            {
                DataRow studio = DAL.Database.Object_Get(Database.ObjectType.Studio, studioId).Rows[0];
                var studioName = studio["name"].ToString();
                string literal = string.Format("<div class=\"form-group\">" +
                                                "<label for=\"team_filter_{0}\" class=\"col-md-3 control-label text-nowrap\">{1}</label>" +
                                                "<select id=\"team_filter_{0}\" class=\"col-md-9\" multiple=\"true\">" +
                                                "<option value=\"studio_{0}\" data-type=\"studio\">All {1}</option>", studioId, studioName);

                // ...
                literal += "<optgroup label=\"Games\">";
                literal += "<option value=\"game_0\" data-type=\"game\">All Games</option>";

                literal += "</optgroup>";

                literal += "</select>" +
                            "</div>";

                filterselectors.Controls.Add(new LiteralControl(literal));

如果您查看select元素,我将生成一个id (即team_filter_1、team_filter_2)并附加数据库记录的主键。

在这个页面上,我有一个按钮,它调用下面的方法来处理从select列表中选中的选项(我使用了Bootstrap multiselect插件)。

代码语言:javascript
复制
private bool GenerateFinancialReport()
    {            
        HtmlSelect select = (HtmlSelect)Page.FindControl("team_filter_???");
        QueryDropDown(select, DAL.Database.ObjectType.Game, out games, out gameNames);

        // ...            
    }

我有两个问题,我必须引用所有的select元素,但是我不知道它们的id。其次,我认为我不能使用FindControl方法,因为这不是一个服务器控件。我在上面对team_filter_1的调用中尝试了硬编码“FindControl”,但是select变量总是为null。

我还尝试在代码隐藏中使用服务器控件,如下所示,但我仍然遇到同样的问题。当页面发回时,我无法引用代码隐藏中的下拉列表:

代码语言:javascript
复制
foreach (int studioId in studioIds)
            {
                DataRow studio = DAL.Database.Object_Get(Database.ObjectType.Studio, studioId).Rows[0];
                var studioName = studio["name"].ToString();

                // Start
                Panel formGroup = new Panel();
                formGroup.Attributes.Add("class", "form-group");

                Label label = new Label();
                label.Attributes.Add("for", "team_filter_" + studioId);
                label.Attributes.Add("class", "col-md-3 control-label text-nowrap");
                label.Text = studioName;

                HtmlSelect teamfilter = new HtmlSelect();
                teamfilter.ID = "team_filter_" + studioId;
                teamfilter.Attributes.Add("class", "col-md-9");
                teamfilter.Attributes.Add("multiple", "true");

                ListItem listItem = new ListItem("All " + studioName, "studio_" + studioId);
                listItem.Attributes.Add("data-type", "studio");
                teamfilter.Items.Add(listItem);

                listItem = new ListItem("All Games", "game_0");
                listItem.Attributes.Add("data-type", "game");
                teamfilter.Items.Add(listItem);

                formGroup.Controls.Add(label);
                formGroup.Controls.Add(teamfilter);
                filterselectors.Controls.Add(formGroup);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-15 16:29:33

您将在从服务器检索数据时遇到困难,特别是因为您没有使用服务器控件。我认为最好的(即最简单、最简单的)选项可能是通过javascript获取I,然后通过ASP.NET Web控制器将它们传递给服务器,或者将I的逗号分隔的列表粘贴到ASP隐藏输入字段中。

Javascript获取选项值并存储它们,对于引导多选择插件来说如下所示:

代码语言:javascript
复制
var selectedIDs = [];
var stringVal = '';
$('div.form-group ul.multiselect-container.dropdown-menu li.active').each(function(i){
    selectedIDs.push($(this).attr('value'));
});

stringVal = selectedIDs.join();

$('#myHiddenField').val(stringVal);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30849597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档