Asp.net AjaxControlToolkit未定义-更新扩展器时出错

Asp.net AjaxControlToolkit未定义-更新扩展器时出错,asp.net,ajaxcontroltoolkit,asp.net-4.0,Asp.net,Ajaxcontroltoolkit,Asp.net 4.0,我正在寻找一些方法来警告用户,如果一个表单是“脏”的,他们会尝试离开它 似乎正是我所需要的 然而,它是在2007年写的,当我试图在我的.NET4.0应用程序中使用最新版本的Ajax控件工具包时,它没有起作用 因此,我下载了源代码()并尝试将其更新。但这是我第一次尝试这样的任务,我有点迷路了 我现在得到的错误如下: Microsoft JScript运行时错误:“AjaxControlToolkit”未定义 dirtypanelextenderbehavior.js中给出错误的行是: DirtyP

我正在寻找一些方法来警告用户,如果一个表单是“脏”的,他们会尝试离开它

似乎正是我所需要的

然而,它是在2007年写的,当我试图在我的.NET4.0应用程序中使用最新版本的Ajax控件工具包时,它没有起作用

因此,我下载了源代码()并尝试将其更新。但这是我第一次尝试这样的任务,我有点迷路了

我现在得到的错误如下:
Microsoft JScript运行时错误:“AjaxControlToolkit”未定义

dirtypanelextenderbehavior.js中给出错误的行是:
DirtyPanelExtender.DirtyPanelExtenderBehavior.registerClass('DirtyPanelExtender.DirtyPanelExtenderBehavior',AjaxControlToolkit.BehaviorBase)

以下是我迄今为止所做的:
1.从Codeproject文章下载源代码
2.在Visual Studio 2010中打开并完成升级向导
3.删除对AjaxControlToolkit.dll的引用,并替换为对该工具包最新版本的新引用 4.使用
ToolkitScriptManager
(不确定是否需要)修改了对
ScriptManager
的引用
5.修改示例网站,在页面上使用
ToolkitScriptManager
代替
ScriptManager

苏欧,你知道我做错了什么吗?或者我错过了什么?这样我就可以重新编译
DirtyPanelExtender.dll
并在.NET4.0项目中使用它了

下面是我正在使用的完整代码。我写了这封信,除了上面详述的我的修正案——我不拿信用卡

DirtyPanelExtender.cs:

using System;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections.Generic;
using System.Text;
using AjaxControlToolkit;

[assembly: System.Web.UI.WebResource("DirtyPanelExtender.DirtyPanelExtenderBehavior.js", "text/javascript")]

namespace DirtyPanelExtender
{
    [Designer(typeof(DirtyPanelExtenderDesigner))]
    [ClientScriptResource("DirtyPanelExtender.DirtyPanelExtenderBehavior", "DirtyPanelExtender.DirtyPanelExtenderBehavior.js")]
    [TargetControlType(typeof(Panel))]
    [TargetControlType(typeof(UpdatePanel))]
    public class DirtyPanelExtender : ExtenderControlBase
    {
        [ExtenderControlProperty]
        [DefaultValue("Data has not been saved.")]
        public string OnLeaveMessage
        {
            get
            {
                return GetPropertyValue("OnLeaveMessage", "");
            }
            set
            {
                SetPropertyValue("OnLeaveMessage", value);
            }
        }

        protected override void OnPreRender(EventArgs e)
        {
            string values_id = string.Format("{0}_Values", TargetControl.ClientID);
            string values = (Page.IsPostBack ? Page.Request.Form[values_id] : String.Join(",", GetValuesArray()));
            ToolkitScriptManager.RegisterHiddenField(this, values_id, values);
            base.OnPreRender(e);
        }

        private string[] GetValuesArray()
        {
            return GetValuesArray(TargetControl.Controls);
        }

        private string[] GetValuesArray(ControlCollection coll)
        {
            List<string> values = new List<string>();
            foreach (Control control in coll)
            {
                if (control is RadioButtonList)
                {
                    for (int i = 0; i < ((RadioButtonList)control).Items.Count; i++)
                    {
                        values.Add(string.Format("{0}_{1}:{2}", control.ClientID, i, ((RadioButtonList)control).Items[i].Selected.ToString().ToLower()));
                    }
                }
                else if (control is ListControl)
                {
                    StringBuilder data = new StringBuilder();
                    StringBuilder selection = new StringBuilder();
                    foreach (ListItem item in ((ListControl) control).Items)
                    {
                        data.AppendLine(item.Text);
                        selection.AppendLine(item.Selected.ToString().ToLower());
                    }
                    values.Add(string.Format("{0}:data:{1}", control.ClientID, Uri.EscapeDataString(data.ToString())));
                    values.Add(string.Format("{0}:selection:{1}", control.ClientID, Uri.EscapeDataString(selection.ToString())));
                }
                else if (control is IEditableTextControl)
                {
                    values.Add(string.Format("{0}:{1}", control.ClientID, Uri.EscapeDataString(((IEditableTextControl)control).Text)));
                }
                else if (control is ICheckBoxControl)
                {
                    values.Add(string.Format("{0}:{1}", control.ClientID, ((ICheckBoxControl)control).Checked.ToString().ToLower()));
                }

                values.AddRange(GetValuesArray(control.Controls));
            }
            return values.ToArray();
        }

        public void ResetDirtyFlag()
        {
            ToolkitScriptManager.RegisterClientScriptBlock(TargetControl, TargetControl.GetType(),
                string.Format("{0}_Values_Update", TargetControl.ClientID), string.Format("document.getElementById('{0}').value = '{1}';",
                    string.Format("{0}_Values", TargetControl.ClientID), String.Join(",", GetValuesArray())), true);
        }
    }
}
使用系统;
使用System.Web.UI.WebControl;
使用System.Web.UI;
使用系统组件模型;
使用System.ComponentModel.Design;
使用System.Collections.Generic;
使用系统文本;
使用AjaxControlToolkit;
[assembly:System.Web.UI.WebResource(“DirtyPanelExtender.DirtyPanelExtenderBehavior.js”,“text/javascript”)]
命名空间DirtyPanelExtender
{
[Designer(typeof(DirtyPanelExtenderDesigner))]
[ClientScriptResource(“DirtyPanelExtender.DirtyPanelExtenderBehavior”、“DirtyPanelExtenderBehavior.DirtyPanelExtenderBehavior.js”)]
[目标控制类型(面板类型))]
[TargetControlType(typeof(UpdatePanel))]
公共类DirtyPanelExtender:ExtenderControlBase
{
[ControlProperty]
[DefaultValue(“数据尚未保存”)]
公共字符串OnLeaveMessage
{
得到
{
返回GetPropertyValue(“OnLeaveMessage”,即“”);
}
设置
{
SetPropertyValue(“OnLeaveMessage”,值);
}
}
受保护的覆盖无效OnPreRender(EventArgs e)
{
string values_id=string.Format(“{0}_values”,TargetControl.ClientID);
字符串值=(Page.IsPostBack?Page.Request.Form[values_id]:string.Join(“,”,GetValuesArray());
ToolkitScriptManager.RegisterHiddenField(此,值\u id,值);
基于预渲染(e);
}
私有字符串[]GetValuesArray()
{
返回GetValuesArray(TargetControl.Controls);
}
私有字符串[]GetValuesArray(ControlCollection coll)
{
列表值=新列表();
foreach(coll中的控制)
{
如果(控件为RadioButtonList)
{
对于(int i=0;i<((RadioButtonList)控件)。Items.Count;i++)
{
Add(string.Format(“{0}{1}:{2}”),control.ClientID,i,((RadioButtonList)control.Items[i]。Selected.ToString().ToLower());
}
}
else if(控件为ListControl)
{
StringBuilder数据=新的StringBuilder();
StringBuilder选择=新建StringBuilder();
foreach((ListControl)控件中的ListItem项.Items)
{
data.AppendLine(item.Text);
selection.AppendLine(item.Selected.ToString().ToLower());
}
Add(string.Format(“{0}:数据:{1}”),control.ClientID,Uri.EscapeDataString(data.ToString());
Add(string.Format(“{0}:selection:{1}”、control.ClientID、Uri.EscapeDataString(selection.ToString()));
}
else if(控件为IEditableTextControl)
{
Add(string.Format(“{0}:{1}”、control.ClientID、Uri.EscapeDataString(((IEditableTextControl)control.Text));
}
else if(控件为ICheckBoxControl)
{
Add(string.Format(“{0}:{1}”、control.ClientID、((ICheckBoxControl)控件).Checked.ToString().ToLower());
}
values.AddRange(GetValuesArray(control.Controls));
}
返回值。ToArray();
}
public void ResetDirtyFlag()
{
ToolkitScriptManager.RegisterClientScriptBlock(TargetControl,TargetControl.GetType(),
string.Format(“{0}_Values_Update”,TargetControl.ClientID),string.Format(“document.getElementById('{0}')。value='{1}';”,
Format(“{0}\u Values”,TargetControl.ClientID),string.Join(“,”,GetValuesArray()),true);
}
}
}
dirtypanelextenderbehavior.js:

Type.registerNamespace('DirtyPanelExtender');

DirtyPanelExtender.DirtyPanelExtenderBehavior = function(element) {

    DirtyPanelExtender.DirtyPanelExtenderBehavior.initializeBase(this, [element]);
    this._OnLeaveMessageValue = null;
}

DirtyPanelExtender.DirtyPanelExtenderBehavior.prototype = {

    isDirty : function() {
        var values_control = document.getElementById(this.get_element().id + "_Values");
        var values = values_control["value"].split(",");
        for (i in values) {
            var namevalue = values[i];
            var namevaluepair = namevalue.split(":");
            var name = namevaluepair[0];
            var value = (namevaluepair.length > 1 ? namevaluepair[1] : "");
            var control = document.getElementById(name);
            if (control == null) continue;
            // alert(control.id + " -> " + control.type);
            if (control.type == 'checkbox' || control.type == 'radio') {
                var boolvalue = (value == "true" ? true : false);
                if(control.checked != boolvalue) {
                    // alert("checkbox changed: " + control.checked + " vs. " + boolvalue);
                    return true;
                }
            } else if (control.type == 'select-one' || control.type == 'select-multiple') {
               if (namevaluepair.length > 2) {
                   if ( control.options.length > 0) {
                       // control is listbox
                       // there's data:value and selection:value
                       var code = value;
                       value = (namevaluepair.length > 2 ? namevaluepair[2] : "");
                       var optionValues = "";
                       // concat all listbox items
                       for( var cnt = 0; cnt < control.options.length; cnt++) {
                          if (code == 'data') {
                              optionValues += control.options[cnt].text;
                          } else if (code == 'selection') {
                              optionValues += control.options[cnt].selected;
                          }
                          optionValues += "\r\n";
                       }
                       if( encodeURIComponent(optionValues) != value ) {
                          // items in the listbox have changed
                          // alert("listbox " + code + " changed: " + encodeURIComponent(optionValues) + " vs. " + value);
                          return true;
                       }
                   }
               } else if(control.selectedIndex != value) {
                   // alert("dropdown selection changed: " + control.selectedIndex + " vs. " + value);
                   return true;
               }
            } else {
                if(encodeURIComponent(control.value) != value) {
                    // alert("control " + control.type + " changed: " + control.value + " vs. " + value);
                    return true;
                }
            }
        }
        return false;
    },

    initialize : function() {        
        DirtyPanelExtender.DirtyPanelExtenderBehavior.callBaseMethod(this, 'initialize');
        DirtyPanelExtender_dirtypanels[DirtyPanelExtender_dirtypanels.length] = this;
    },

    dispose : function() {
        DirtyPanelExtender.DirtyPanelExtenderBehavior.callBaseMethod(this, 'dispose');
    },

    get_OnLeaveMessage : function() {
        return this._OnLeaveMessageValue;
    },

    set_OnLeaveMessage : function(value) {
        this._OnLeaveMessageValue = value;
    }
}

DirtyPanelExtender.DirtyPanelExtenderBehavior.registerClass('DirtyPanelExtender.DirtyPanelExtenderBehavior', AjaxControlToolkit.BehaviorBase);

var DirtyPanelExtender_dirtypanels = new Array()

function DirtyPanelExtender_SuppressDirtyCheck()
{
  window.onbeforeunload = null;
}

function __newDoPostBack(eventTarget, eventArgument) 
{ 
  // supress prompting on postback
  DirtyPanelExtender_SuppressDirtyCheck();
  return __savedDoPostBack (eventTarget, eventArgument);
}

var __savedDoPostBack = __doPostBack;
__doPostBack = __newDoPostBack; 

window.onbeforeunload = function (eventargs) 
{
    for (i in DirtyPanelExtender_dirtypanels)
    {
        var panel = DirtyPanelExtender_dirtypanels[i];
        if (panel.isDirty()) 
        {
          if(! eventargs) eventargs = window.event;
          eventargs.returnValue = panel.get_OnLeaveMessage();
          break;
        }
    }
}
Type.registerNamespace('DirtyPanelExtender');
DirtyPanelExtender.DirtyPanelExtenderBehavior=函数(元素){
DirtyPanelExtender.DirtyPanelExtenderBehavior.initializeBase(此,[元素]);
这是。\ OnLeaveMessageValue=null;
}
DirtyPanelExtender.DirtyPanelExtenderBehavior.prototype={
isDirty:function(){
var值\u控制=单据
DirtyPanelExtender.DirtyPanelExtenderBehavior.registerClass('DirtyPanelExtender.DirtyPanelExtenderBehavior', AjaxControlToolkit.BehaviorBase);
DirtyPanelExtender.DirtyPanelExtenderBehavior.registerClass('DirtyPanelExtender.DirtyPanelExtenderBehavior', Sys.Extended.UI.BehaviorBase);