0

我有一个中继器,在这个中继器里面我有一个更新面板。在这个 UpdatePanel 中,我有一个隐藏的,我想在 Repeater_ItemCommand 事件中显示它。我正在努力解决这个问题,而且我不是 Jquery-guru .. 在 Firebug-console 中它说: ReferenceError: showError is not defined

这是 UpdatePanel(div #errorMessage 在底部):

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <%# GetComments (DataBinder.Eval(Container, "DataItem.id")) %>
                        <div class="contact_form">
                            <ul>
                                <li>
                                    <h2>Skriv en kommentar til oss!</h2>
                                </li>
                                <li>
                                    <asp:TextBox ID="txtName" runat="server" CssClass="txtBox" placeholder="Ditt navn" />                                                                                                                                                        
                                    <span class="form_hint">Ditt navn skal stå her</span>
                                </li>
                                <li>
                                    <asp:TextBox ID="txtCaptcha" runat="server" CssClass="txtBox" placeholder="Skriv resultatet av 10 pluss 6 her" />                                                                            
                                    <span class="form_hint">Du klarer vel å regne ut 10+6? :-)</span>
                                </li>
                                <li>
                                    <asp:TextBox ID="txtComment" runat="server" TextMode="MultiLine" placeholder="Din kommentar"  />                                                                            
                                </li>                                                                        
                                <li>
                                    <asp:Button ID="cmdSaveComment" CssClass="button" runat="server" CommandName="SaveComment" CommandArgument='<%# Eval("id")%>' Text="Puliser kommentar" />
                                </li>                                                                        
                            </ul>
                            <div id="#errorMessage<%# Eval("id") %>" style="display:none;">
                                <p>Du må skrive resultatet av 10+6 i boksen for å få publisert kommentaren</p>
                            </div>
                        </div>
                    </ContentTemplate>
                </asp:UpdatePanel>

在我的 .js 文件中,我创建了这个函数:

$(document).ready(function showError (divId) {
        $id = divId;
        $("#errorMessage" + $id + '').show("slide");        
        return false;    
});

在代码隐藏中,我想触发这个:

protected void RepeaterBlog_ItemCommand(Object Sender, RepeaterCommandEventArgs e)
        {            
            if (e.CommandName == "SaveComment")
            {
                int blogID = Int32.Parse(e.CommandArgument.ToString());
                string name = ((TextBox)e.Item.FindControl("txtName")).Text;
                string comment = ((TextBox)e.Item.FindControl("txtComment")).Text;
                string captcha = ((TextBox)e.Item.FindControl("txtCaptcha")).Text;

                if (captcha == "16")
                {
                    if (name == "")
                    {
                        name = "Anonym";
                    }
                    name = name.Replace("'", "&#39;");
                    comment = comment.Replace("'", "&#39;");
                    dh.NewComment(name, comment, blogID);
                    GetItems();
                }
                else
                {
                    //show error box
                    string js = "$(document).ready(function () { showError('" + blogID.ToString() + "'); });";
                    ScriptManager.RegisterStartupScript(this, GetType(), blogID.ToString(), js, true);

                    //string js = "$(document).ready(function () {$(document).on('show', function() { $('#errorMessage" + blogID.ToString() + "').show('slide');return false;})});";
                    //ScriptManager.RegisterStartupScript(this, this.GetType(), blogID.ToString(), js, true);

                }             
            }            
        }

有人可以帮我弄清楚我做错了什么吗?

4

1 回答 1

1

你真的不需要使用$(document).ready(...包装器。这用于在所有页面元素加载后运行 javascript,但您只需删除它并使用直接的 javascript 函数调用。

你的 js 文件:

function showError (divId) {
        $id = divId;
        $("#errorMessage" + $id + '').show("slide");        
        return false;    
}

您的 .Net 代码

////
else
{
    //show error box
    string js = "showError('" + blogID.ToString() + "');";
    ScriptManager.RegisterStartupScript(this, GetType(), blogID.ToString(), js, true);
}
////      

此外,在您的 errorMessage div 中,您不应在 ID 中包含主题标签。在您的 jquery 调用中,您使用它来表示您指的是 ID 元素,但这不应该是 ID 分配的一部分。

<div id="errorMessage<%# Eval("id") %>" style="display:none;">
    <p>Du må skrive resultatet av 10+6 i boksen for å få publisert kommentaren</p>
</div>
于 2013-04-25T23:10:11.727 回答