0

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

扩展下拉列表:

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 再次调用此方法?(显然我必须创建一个公共访问器)

任何答案都会很有用。提前致谢。

4

1 回答 1

1

尝试在客户端上“绑定”asp 控件存在一些问题。

  • 第一个问题是,一旦它在客户端上,它通常是 HTML 元素的集合。保存“绑定”数据的一个或多个元素可能并不明显,尤其是在绑定过程中将属性添加到元素时。
  • 第二个问题是您不会在客户端拥有任何控件生成脚本。因此,您为更改其外观所做的任何事情都必须使用脚本手动完成。

因此,要做到这一点,您需要执行以下操作:

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

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

也就是说,在 a 的情况下select,确保您可以获取该select元素,并且您可以删除option其中包含的元素并完全按照它们被服务器“绑定”时的状态替换它们。

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

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

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

不用担心序列化或反序列化,ASP 会为您完成;那样很酷。只要您知道返回对象的属性名称,就可以使用您现在拥有的功能。

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

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

这大致就是我在客户端“绑定”一堆网格视图和其他 ASP 控件的方式,以避免整个页面回发和刷新。

这并非不可能,但也不是超级容易。

于 2013-04-16T16:48:36.123 回答