Scriptcontrol - 绑定客户端&服务器属性

时间:2012-05-14 07:40:28

标签: asp.net scriptcontrol msscriptcontrol

是否可以在Scriptcontrol中绑定客户端和服务器端的属性,所以当我在javascript中设置属性时,更改将在后面的代码中可见,当我在代码中设置属性时,更改将在javascript中可见?

我不能像上面那样工作 - 它最初是设置的,当我设置声明scriptcontrol的属性时,但是当我稍后更改它时它仍然和以前一样......

编辑:我尝试在ASP.NET应用程序中为长回发执行ProgressBar。我尝试了很多选项,但没有一个适用于我...我想在代码中设置进度值,并在长期任务回发期间更新它。

ScriptControl的代码: C#:

public class ProgressBar : ScriptControl
{
    private const string ProgressBarType = "ProgressBarNamespace.ProgressBar";
    public int Value { get; set; }
    public int Maximum { get; set; }

    protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors()
    {
        this.Value = 100;
        this.Maximum = 90;
        var descriptor = new ScriptControlDescriptor(ProgressBarType, this.ClientID);

        descriptor.AddProperty("value", this.Value);
        descriptor.AddProperty("maximum", this.Maximum);

        yield return descriptor;
    }

    protected override IEnumerable<ScriptReference> GetScriptReferences()
    {
        yield return new ScriptReference("ProgressBar.cs.js");          
    }
}

使用Javascript:

Type.registerNamespace("ProgressBarNamespace");

ProgressBarNamespace.ProgressBar = function(element) {
    ProgressBarNamespace.ProgressBar.initializeBase(this, [element]);
    this._value = 0;
    this._maximum = 100;
};

ProgressBarNamespace.ProgressBar.prototype = {
    initialize: function () {
        ProgressBarNamespace.ProgressBar.callBaseMethod(this, "initialize");
        this._element.Value = this._value;
        this._element.Maximum = this._maximum;

        this._element.show = function () {
            alert(this.Value);
        };
    },
    dispose: function () {
        ProgressBarNamespace.ProgressBar.callBaseMethod(this, "dispose");
    },
    get_value: function () {
        return this._value;
    },
    set_value: function (value) {
        if (this._value !== value) {
            this._value = value;
            this.raisePropertyChanged("value");
        }
    },
    get_maximum: function () {
        return this._maximum;
    },
    set_maximum: function (value) {
        if (this._maximum !== value) {
            this._maximum = value;
            this.raisePropertyChanged("maximum");
        }
    }
};

ProgressBarNamespace.ProgressBar.registerClass("ProgressBarNamespace.ProgressBar", Sys.UI.Control);
if (typeof (Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

我会感谢任何实现此进度条的方法......

1 个答案:

答案 0 :(得分:1)

就个人而言,我经常使用隐藏字段。 请记住,隐藏的字段不安全并且可能有其他垮台,因为它们实际上并没有隐藏它们的值,只是不显示它。

ASPX标记

<asp:HiddenField ID="hiddenRequest" runat="server" ClientIDMode="Static" />

背后的ASPX.CS代码

    public string HiddenRequest
    {
        set
        {
            hiddenRequest.Value = value;
        }
        get
        {
            return hiddenRequest.Value;
        }
    }

页面JAVASCRIPT(使用jQuery)

$('#hiddenRequest').val('MyResult');

这样,我可以使用一个变量访问同一个字段,从客户端和服务器端访问。