重新加载延长下拉菜单

时间:2013-04-16 14:44:21

标签: jquery asp.net drop-down-menu dropdownbox

我的页面上没有本机下拉列表(从下拉列表扩展)组件。我在类构造函数方法中插入数据,但现在我每次创建一个新对象时都要刷新这些数据,我正在尝试使用Jquery但它不起作用,我不知道如何调用DropDownList扩展中包含的Bind方法,遵循以下代码:

Extended DropDownList:

public class XDDLprobabilidadesDeSucesso : XDropDownList
{
    public XDDLprobabilidadesDeSucesso()
    {
        this.DataSource = GetDataBind();
        this.DataTextField = "text";
        this.DataValueField = "id";
        this.DataBind();
    }

    private List<DDLBindType> GetDataBind()
    {
        List<DDLBindType> l = new List<DDLBindType>();
        BLLProbabilidadesSucesso probabilidade = new BLLProbabilidadesSucesso();
        List<ProbabilidadesSucesso> probabilidades = probabilidade.Retrieve().ToList();

        DDLBindType item = new DDLBindType();

        item.id = 0;
        item.text = "Selecione";
        l.Add(item);

        foreach (ProbabilidadesSucesso prob in probabilidades)
        {
            item = new DDLBindType();
            item.id = prob.idProbSucesso;
            item.text = prob.porcentagem.Value.ToString();
            l.Add(item);
        }

        return l;
    }
}

你能看到,DataBind是在类构造函数中调用的吗?如何从Jquery再次调用此方法? (显然我要创建一个公共访问者)

任何答案都是有用的。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

尝试在客户端上“绑定”asp控件时会遇到一些问题。

  • 第一个问题是,一旦它在客户端,它通常是一个 HTML元素的集合。持有的元素 “绑定”数据可能不明显,尤其是在绑定期间 流程属性被添加到元素中。
  • 第二个问题是你不会有任何控制权 客户端生成脚本。所以你要做的就是改变它 外观必须用脚本手动完成。

为此,您需要执行以下操作:

首先弄清楚控件的呈现方式。由于这是一个下拉,我假设它呈现为select,除非它是某种图像启用下拉,在这种情况下,这将是非常困难。

一旦您知道客户端上“绑定”数据的位置,请弄清楚如何选择它。一旦你有一个可以可靠地获取适当元素的选择器,确保你能够销毁并创建'bound'元素。

也就是说,对于select,请确保您可以获取select元素,并且可以删除其中包含的option元素并将其完全替换为它们是在服务器“绑定”的时候。

我说首先要做的就是这样做,因为如果你不能可靠地重新创建控件的结构,那么你将无法在客户端“绑定”。

一旦您有了重新创建控件的选择器和方法,那么就可以使webMethod公开页面中的信息。查看页面并确保您在客户端获得所需信息,以便从服务器获取信息以“绑定”。您需要弄清楚服务器是否需要任何参数才能收集正确的信息。

webMethod应该以您可以在客户端上轻松消化它的方式返回信息。您可以使用数据表或对象列表执行此操作;你可以迭代的任何东西。

不要担心序列化或反序列化,ASP会为您做到这一点;这样很酷。只要知道返回的对象的属性名称,就可以使用现在的函数。

创建webMethod后,您可以在页面上创建AJAX调用以获取要绑定的数据。在成功回调ajax调用以收集数据时,您需要呈现新信息。

您需要清空select,然后使用option元素为您返回的数据集中的每个对象重新填充它。再次假设下拉列表呈现为select元素。

这大致是我在客户端“绑定”了一堆gridviews和其他ASP控件,以避免整页回发和刷新。

这不是不可能,但并不是一件容易的事。