asp:CheckBoxList 呈现为 span 并且没有复选框(FF 和 webkit)

asp:CheckBoxList renders as span and no checkboxes(FF and webkit)

我正在使用 asp.net 的 CheckboxList 控件。它在过去按预期工作正常,但肯定它开始无法在 chrome 和 firefox 浏览器中正确呈现。它在 Internet Explorer 中完美呈现(在我的例子中是 9)。

它在 span 标签中呈现如下

<div class="clearfix">
  <span id="cntMain_chkColumns">Activity IDActivity TItleSubmitted ByActivity DateRequest DateAmountStatusExternal Activity IDCustomer ID</span>
</div>

虽然正确和预期的渲染(来自 IE)如下

<span class="defaultP checkbox-wp drag-box-wp  ui-draggable ui-droppable makeDragDrop"><div class="ez-checkbox ez-checked"><input id="cntMain_chkColumns_0" class="ez-hide" name="ctl00$cntMain$chkColumns[=12=]" value="0" CHECKED="checked" type="checkbox"></div><label for="cntMain_chkColumns_0">Activity ID</label></span>
<span
class="defaultP checkbox-wp drag-box-wp  ui-draggable ui-droppable makeDragDrop">
  <div class="ez-checkbox ez-checked">
    <input id="cntMain_chkColumns_1" class="ez-hide" name="ctl00$cntMain$chkColumns" value="1" CHECKED="checked" type="checkbox">
  </div>
  <label for="cntMain_chkColumns_1">Activity TItle</label>
  </span><span class="defaultP checkbox-wp drag-box-wp  ui-draggable ui-droppable makeDragDrop"><div class="ez-checkbox ez-checked"><input id="cntMain_chkColumns_2" class="ez-hide" name="ctl00$cntMain$chkColumns" value="2" CHECKED="checked" type="checkbox"></div><label for="cntMain_chkColumns_2">Submitted By</label></span>
  <span
  class="defaultP checkbox-wp drag-box-wp  ui-draggable ui-droppable makeDragDrop">
    <div class="ez-checkbox ez-checked">
      <input id="cntMain_chkColumns_3" class="ez-hide" name="ctl00$cntMain$chkColumns" value="3" CHECKED="checked" type="checkbox">
    </div>
    <label for="cntMain_chkColumns_3">Activity Date</label>
    </span><span class="defaultP checkbox-wp drag-box-wp  ui-draggable ui-droppable makeDragDrop"><div class="ez-checkbox ez-checked"><input id="cntMain_chkColumns_4" class="ez-hide" name="ctl00$cntMain$chkColumns" value="4" CHECKED="checked" type="checkbox"></div><label for="cntMain_chkColumns_4">Request Date</label></span>
    <br><span class="defaultP checkbox-wp drag-box-wp  ui-draggable ui-droppable makeDragDrop"><div class="ez-checkbox ez-checked"><input id="cntMain_chkColumns_5" class="ez-hide" name="ctl00$cntMain$chkColumns" value="5" CHECKED="checked" type="checkbox"></div><label for="cntMain_chkColumns_5">Amount</label></span>
    <span
    class="defaultP checkbox-wp drag-box-wp  ui-draggable ui-droppable makeDragDrop">
      <div class="ez-checkbox ez-checked">
        <input id="cntMain_chkColumns_6" class="ez-hide" name="ctl00$cntMain$chkColumns" value="6" CHECKED="checked" type="checkbox">
      </div>
      <label for="cntMain_chkColumns_6">Status</label>
      </span><span class="defaultP checkbox-wp drag-box-wp  ui-draggable ui-droppable makeDragDrop"><div class="ez-checkbox ez-checked"><input id="cntMain_chkColumns_7" class="ez-hide" name="ctl00$cntMain$chkColumns" value="7" CHECKED="checked" type="checkbox"></div><label for="cntMain_chkColumns_7">External Activity ID</label></span>
      <span
      class="defaultP checkbox-wp drag-box-wp  ui-draggable ui-droppable makeDragDrop">
        <div class="ez-checkbox ez-checked">
          <input id="cntMain_chkColumns_8" class="ez-hide" name="ctl00$cntMain$chkColumns" value="8" CHECKED="checked" type="checkbox">
        </div>
        <label for="cntMain_chkColumns_8">Customer ID</label>
        </span>
        <br>

**CSS** 以下是 css 规则,如果复选框呈现则应该应用这些规则 :(

.defaultP - is a dummy class for calling ezMark plugin.
.drag-box-wp{ border:1px dashed #cccccc; padding:7px; display:inline; float:left; width:100%; margin:0 0 20px 20px; background:#ffffff; max-width: 195px; }

剩余的 类 用于 jquery-ui-可拖动交互小部件。

下面是我的标记

<asp:CheckBoxList ID="chkColumns" runat="server" RepeatDirection="Horizontal" RepeatColumns="5" RepeatLayout="Flow"></asp:CheckBoxList> 

我在单击按钮时绑定此复选框列表,C# 代码隐藏文件中的绑定代码如下所示

 DataView dvCustomizableColumns = dtCustomizableColumns.DefaultView;
 dvCustomizableColumns.Sort = "Sequence_ID ASC";
 chkColumns.DataSource = dvCustomizableColumns;
 chkColumns.DataTextField = "ColumnDisplayName";
 chkColumns.DataValueField = "Sequence_ID";
 chkColumns.DataBind();

稍后使用一个函数,我使这些复选框可拖动,并使用 ezMark Plugin 在复选框上应用一些样式。

代码:

    private void EnableDraggingOnItems(DataView dvCustomizableColumns)
    {
       for (int i = 0; i < dvCustomizableColumns.Table.Rows.Count; i++)
        {
         if (hdnSelectedColumns.Value != string.Empty)
          {
           if (hdnSelectedColumns.Value.Contains(chkColumns.Items[i].Value))
            {
              chkColumns.Items[i].Selected = true;
            }
          }
         else
          {
            chkColumns.Items[i].Selected = true;
          }


chkColumns.Items[i].Attributes.Add("class", "defaultP checkbox-wp drag-box-wp  ui-draggable ui-droppable makeDragDrop");
        }
    }

我还检查了 chrome 是否有一个复选框 webkit 样式设置为 none 但它在 css.

中没有

如果需要更多信息,请告诉我。

感谢所有对我的问题表现出兴趣的人。幸运的是,我找到了解决问题的办法。 事实证明,在我的母版页中,有一个 jquery 以选择器开头,导致复选框列表的 innerHtml 被更改。

$("span[id^='cntMain']").each(function () {
                $(this).text($(this).text().toString().toTitleCase());
            });

这就是它只呈现标签的原因。 我在上面的代码中更改了选择器,如下所示

 $("span[id^='cntMain']:not(:has(*))").each(function () {
                $(this).text($(this).text().toString().toTitleCase());
            });

虽然这是一个非常具体的问题,但我发布了答案以防有人仍然觉得它有用。

我仍然想知道为什么以及如何在 IE 中工作。