Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net CssClass属性在不正确的元素上生成类名_Asp.net_Webforms - Fatal编程技术网

Asp.net CssClass属性在不正确的元素上生成类名

Asp.net CssClass属性在不正确的元素上生成类名,asp.net,webforms,Asp.net,Webforms,我正在处理一个web表单页面,它有一个GridView,其中包含由asp:RadioButton控件生成的两列单选按钮 我想在相应的列标题中实现一个全选复选框,当选中该复选框时,该复选框将选中该特定列中所有相应的单选按钮 我写了一点jQuery,它可以做到这一点,但它不能立即工作。为了让jQuery选择每个单选按钮并将其标记为选中,我使用CssClass属性设置了asp:RadioButton控件的类名: <asp:RadioButton ID="id" CssClass="myClass

我正在处理一个web表单页面,它有一个GridView,其中包含由asp:RadioButton控件生成的两列单选按钮

我想在相应的列标题中实现一个全选复选框,当选中该复选框时,该复选框将选中该特定列中所有相应的单选按钮

我写了一点jQuery,它可以做到这一点,但它不能立即工作。为了让jQuery选择每个单选按钮并将其标记为选中,我使用CssClass属性设置了asp:RadioButton控件的类名:

<asp:RadioButton ID="id" CssClass="myClass" runat="server" ... />
相反,它将输入元素包装在span元素中,并将我指定的class属性应用于span元素而不是输入元素

在使用ASP:RadioButton控件时,是否有方法防止ASP.NET在我的输入元素周围生成此包装span元素

如果ASP.NET必须生成class属性,是否可以将其应用于实际的输入元素,而不是包装span元素

注意:我已经更新了jQuery,以使用同时工作的选择器:

jQuery("span.myClass input")

这是ASP.NET WebForms的抱怨之一,因为您无法绝对控制呈现的HTML。我使用的jQuery选择器与您实现的完全相同,并且工作得很好

这是ASP.NET WebForms的抱怨之一,因为您无法绝对控制呈现的HTML。我使用的jQuery选择器与您实现的完全相同,并且工作得很好

您无法更改asp.net呈现其控件的方式,以便您可以删除asp.net单选按钮并使用输入标记代替runat=server。

您无法更改asp.net呈现其控件的方式,以便您可以删除asp.net单选按钮并使用输入标记代替runat=server。

System.Web.UI.WebControl命名空间在不同浏览器中的呈现方式可能不同。您不能指望它们总是呈现相同的元素。他们可能会添加他们认为在特定浏览器中工作所需的任何内容,并随.NET的每个版本而变化

如果您想控制控件如何呈现为html,则应使用System.Web.UI.HtmlControls命名空间中的控件。即:

<input type="radio" id="RadioButton1" runat="server" class="myClass" />
<input type="radio" id="RadioButton2" runat="server" class="myClass" />
<input type="radio" id="RadioButton3" runat="server" class="myClass" />
它们将与相应的html元素一样呈现,不添加额外的元素。当然,这意味着您必须对浏览器兼容性负责,因为控件不负责。此外,这些控件没有WebControl命名空间中控件的所有功能。所以这取决于你对具体情况的需求


您还可以找到另一种方法来选择jquery中的所有输入,比如基于id对所有输入使用相似的名称,以及使用通配符来选择所有输入

System.Web.UI.WebControls命名空间中的Web控件在不同浏览器中的呈现方式可能不同。您不能指望它们总是呈现相同的元素。他们可能会添加他们认为在特定浏览器中工作所需的任何内容,并随.NET的每个版本而变化

如果您想控制控件如何呈现为html,则应使用System.Web.UI.HtmlControls命名空间中的控件。即:

<input type="radio" id="RadioButton1" runat="server" class="myClass" />
<input type="radio" id="RadioButton2" runat="server" class="myClass" />
<input type="radio" id="RadioButton3" runat="server" class="myClass" />
它们将与相应的html元素一样呈现,不添加额外的元素。当然,这意味着您必须对浏览器兼容性负责,因为控件不负责。此外,这些控件没有WebControl命名空间中控件的所有功能。所以这取决于你对具体情况的需求


您还可以找到另一种方法来选择jquery中的所有输入,比如基于id对所有输入使用相似的名称,以及使用通配符来选择所有输入

您可以创建一个新的ASP.Net服务器控件,并将inherit从WebControl更改为RadioButton 然后在渲染到该页面后修改html。它删除span标记,并将属性类和标题从span移回rado按钮输入

public class MYRADIOBUTTON: RadioButton
{
   public bool AddSpanTag { get { return ViewState["AddSpanTag"] != null ? (bool)ViewState["AddSpanTag"] : false; } set { ViewState["AddSpanTag"] = value; } }

    protected override void Render(HtmlTextWriter writer)
    {
        if (AddSpanTag)
        {
            base.Render(writer);
        }
        else
        {
            StringWriter w = new StringWriter();
            HtmlTextWriter rbw = new HtmlTextWriter(w);
            base.Render(rbw);
            rbw.Close();                
            string html = w.GetStringBuilder().ToString();
            if (html.Contains("<span"))
            {

                int start = html.IndexOf("<input");
                int end = html.IndexOf("/>", start);
                string rbHtml = html.Substring(start, (end - start));

                if (CssClass != "")
                    rbHtml = rbHtml + " class=\"" + CssClass + "\"";

                if (ToolTip != "")
                    rbHtml = rbHtml + " title=\"" + ToolTip + "\"";

                    html = rbHtml + "/>";                    
            }


            writer.Write(html);
        } 
}
在您的webproject中构建之后。在Designview中打开一个页面,然后您应该会在工具箱中获得一个带有自定义radiobutton控件的新选项卡。将其拖到绘图页上,并将属性AddSpanTag设置为false

<cc1:MYRADIOBUTTON ID="btnSel" ToolTip="Select" GroupName="select" AddSpanTag="false" runat="server" />  

您可以创建一个新的ASP.Net服务器控件,并将inherit从WebControl更改为RadioButton 然后在渲染到该页面后修改html。它删除span标记,并将属性类和标题从span移回rado按钮输入

public class MYRADIOBUTTON: RadioButton
{
   public bool AddSpanTag { get { return ViewState["AddSpanTag"] != null ? (bool)ViewState["AddSpanTag"] : false; } set { ViewState["AddSpanTag"] = value; } }

    protected override void Render(HtmlTextWriter writer)
    {
        if (AddSpanTag)
        {
            base.Render(writer);
        }
        else
        {
            StringWriter w = new StringWriter();
            HtmlTextWriter rbw = new HtmlTextWriter(w);
            base.Render(rbw);
            rbw.Close();                
            string html = w.GetStringBuilder().ToString();
            if (html.Contains("<span"))
            {

                int start = html.IndexOf("<input");
                int end = html.IndexOf("/>", start);
                string rbHtml = html.Substring(start, (end - start));

                if (CssClass != "")
                    rbHtml = rbHtml + " class=\"" + CssClass + "\"";

                if (ToolTip != "")
                    rbHtml = rbHtml + " title=\"" + ToolTip + "\"";

                    html = rbHtml + "/>";                    
            }


            writer.Write(html);
        } 
}
在您的webproject中构建之后。在Designview中打开一个页面,然后您应该会在工具箱中获得一个带有自定义radiobutton控件的新选项卡。将其拖到绘图页上,并将属性AddSpanTag设置为false

<cc1:MYRADIOBUTTON ID="btnSel" ToolTip="Select" GroupName="select" AddSpanTag="false" runat="server" />  

是的,它工作得很好。我想知道是否可以防止额外的标记。感谢您的及时回复。您可以使用标准HTML控件b
但是我假设你想从代码背后访问RadioButton网络控件,如果是这样的话,那么这是你必须解决的缺点之一。是的,我需要从代码背后访问它。但是,看了一眼之后,我认为我可以摆脱像Precious Roy建议的HTMLControl。是的,它运行良好,我想知道是否可以防止附加标记。感谢您的及时回复。您可以使用标准HTML控件,但我假设您希望能够从代码后面访问RadioButton网络控件,如果是这样的话,那么这就是你必须克服的缺点之一。是的,我需要从后面的代码中访问它。但是,在看了之后,我认为我可以像罗伊建议的那样使用HTMLControl。