将asp Validator的可见性设置为True不会影响任何更改

时间:2014-02-21 01:23:42

标签: html asp.net css .net

我有一个CustomValidator和一个RegularExpressionValidator,它们在后面的代码中设置了可见性。我想这样做,以便当页面不是回发时,控件不会在html文档中保留任何空格

注意:我已经尝试使用控件的动态显示设置,但这对我不起作用,因为它强制显示内联样式:内联会破坏我的布局

但是,这种情况适用于我在页面中使用的requirefieldvalidator。

以下是控件及其验证器的示例:

<dl class="accordion" data-accordion="">
    <dd>
        <a href="#PanelProductPricing">Product Pricing and Inventory</a>
        <div id="PanelProductPricing" class="content active">
            <fieldset>
                <div class="row">
                    <%-- SALE PRICE ------------------------------------------%>
                    <div class="medium-4 small-12 columns">
                        <label>
                            Sale Price
                            <input id="tbPriceSale" type="text" placeholder="Sale Price" runat="server" />
                            <asp:CustomValidator runat="server" ID="cvPriceSale" ControlToValidate="tbPriceSale" EnableClientScript="true" Text="Please enter a sale price" 
                                CssClass="error" ValidationGroup="AddProduct"
                                OnServerValidate="cvPriceSale_ServerValidate" />
                            <asp:RegularExpressionValidator ID="RegularExpressionValidator3" runat="server" ControlToValidate="tbPriceSale" Text="Invalid value for sale price"
                                ValidationExpression="^\$(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$" ValidationGroup="AddProduct" CssClass="error" />
                        </label>
                    </div>
                </div>
            </fieldset>

        </div>
    </dd>
</dl>

因此,在页面加载事件中,我有以下内容:

If Not Page.IsPostBack Then

    rexvPriceSale.Visible = False
    cvPriceSale.Visible = False

ElseIf Page.IsPostBack = True Then

    rexvPriceSale.Visible = True
    cvPriceSale.Visible = True

End If

以下是为输出HTML中的验证器控件呈现的内容:

<span id="dnn_ctr2601_AddProduct_cvPriceSale" class="error" style="visibility:hidden;">Please enter a sale price</span>
<span id="dnn_ctr2601_AddProduct_rexvPriceSale" class="error" style="visibility:hidden;">Invalidvalue for sale price</span>

问题

如您所见,以下样式添加到控件样式=“visibility:hidden;”并且控件不可见,但它确实占据了屏幕中的“空格”。

我无法弄清楚这种风格的来源

我尝试从回发中删除visibility = true并将其标记为false,但无论我做什么,控件都会以完全相同的方式呈现。

问题:

有人可以帮我弄清楚为什么验证器具有可见性渲染:隐藏无论我如何在服务器端代码中设置其可见性。

1 个答案:

答案 0 :(得分:0)

尝试将asp:PlaceHolder放在它们周围,并设置其可见性。