访问Header / FooterTemplate中的控件C#

时间:2013-06-20 14:34:03

标签: c# asp.net datalist

我的问题是我在FooterTemplate和HeaderTemplate(在数据列表中)中有一个按钮,我需要禁用它们/基于bool启用它们。我知道使用ItemDataBound,但是设置页面的其余部分的方式不起作用,因为绑定的唯一时间是初始页面加载。

我曾经有过这个使用javascript的工作,但是发生了一些事情,我的javascript已经不再适用了。所以我希望能够通过代码隐藏来实现。那么无论如何使用foreach循环来访问控件?

在我试图做的事件中,我有以下循环:

 foreach (DataListItem dli in list.Items)
 {
    int qty = Convert.ToInt32(((TextBox)dli.FindControl("qtyTextBox")).Text);
    int productID = Convert.ToInt32(((Literal)dli.FindControl("prodId")).Text);

    isQtyValid = COMMONACES.GetValues.getTotalQty(sessionID, productID, qty);

    lblError.Visible = !isQtyValid;
    lblError.Text = isQtyValid ? string.Empty : "The total quantity for one or more items exceeds the maximum. The total quantity includes items already in the cart.";

    Page.ClientScript.RegisterStartupScript(this.GetType(), "function", "SetButtonStatus()", true); //used to access javascript
}

使用Javascript:

function SetButtonStatus() {
    var bb = document.getElementsByClassName('ButtonSubmit');
    for (var i = 0; i < bb.length; i++) {
        bb[i].disabled = <%=(!isQtyValid).ToString().ToLower()%>;
    }
}

我试图在文本更改事件以及selectedIndexchanged事件中执行此操作,如果这是有用的信息。如果要求任何其他信息,我会尽力提供。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

关注您的代码:

 Page.ClientScript.RegisterStartupScript(this.GetType(), "function", "SetButtonStatus();", true); //used to access javascript

并在SetButtonStatus()

document.getElementById('<%= ControlButton.ClientID %>').disabled = true/false;

如果您的代码以前有效并且现已停止,请确保您没有JavaScript错误,即数据列表中显示的数据导致了该问题。

bool isNotValid= false;

foreach (DataListItem dli in list.Items)
{
    int qty = Convert.ToInt32(((TextBox)dli.FindControl("qtyTextBox")).Text);
    int productID = Convert.ToInt32(((Literal)dli.FindControl("prodId")).Text);

    isQtyValid = COMMONACES.GetValues.getTotalQty(sessionID, productID, qty);

    lblError.Visible = !isQtyValid;
    lblError.Text = isQtyValid ? string.Empty : "The total quantity for one or more items exceeds the maximum. The total quantity includes items already in the cart.";
    if(!isQtyValid)
        isNotValid=true;
}

Page.ClientScript.RegisterStartupScript(this.GetType(), "function", string.Format("SetButtonStatus('{0}')", isNotValid.ToString().ToLower()) , true); //used to access javascript

function SetButtonStatus(isNotValid) {
    var bb = document.getElementsByClassName('ButtonSubmit');
    for (var i = 0; i < bb.length; i++) {
        bb[i].disabled = isNotValid;
    }
}