sys.argumentexception 对于控件和行为 值不能为空

"sys.argumentexception  对于控件和行为 值不能为空"异常


<a id="ssA" runat="server"  href='../default.aspx?ss=<%# Server.HtmlEncode(DataBinder.Eval

(Container.DataItem,"ss").ToString())%>' target="_blank"><%# Eval("ss")%></a>

 

HoverMenuExtender控件TargetControlID属性设为ssA

 

结果出现"sys.argumentexception  对于控件和行为 值不能为空"异常!

刚开始,以为是AJAX控件的原因,因为.NET Framework中有一个ArgumentException异常类型。当调用一个方法,而传递给该方法的参数不能满足该方法对参数的要求时,产生该异常。.NET的ArgumentException异常具有一个只读属性ParamName,用以设定异常产生时导致异常的参数名。

ASP.NET AJAX 客户端框架扩展了JavaScript以使其支持一个与此类似的异常类型ArgumentException。该异常属于名称空间Sys。该JavaScript异常ArgumentException向外提供两个参数,分别为paramName和name。和所有的JavaScript异常的name属性一样,其name属性为一个字符串,该字符串唯一确定异常的类型。而paramName属性则等价于.NET Framework中ArgumentException类型异常的ParamName属性。

同样,ASP.NET AJAX客户端框架也扩展了JavaScript Error类型的功能以支持一个静态方法argument。该方法自动创建一个Sys.ArgumentException异常的实例,并将该实例返回给调用者。理解该函数功能的最好方法是看看它的内部实现:

Error.argument = function(a, c)

{

var b = "Sys.ArgumentException: " +

(c ? c : Sys.Res.argument);

if(a)

b += "/n" + String.format(Sys.Res.paramName, a);

var d = Error.create(b,

{ name : "Sys.ArgumentException",

paramName : a});

d.popStackFrame();

return d;

};

注意,argument 静态方法有两个参数,第一个参数为一个字符串,表示导致异常发生的参数名,第二个参数也是字符串,表示错误的消息。argument函数在内部调用已经在第2章中讨论过的create静态方法:

var d = Error.create(b,

{ name : "Sys.ArgumentException",

paramName : a});

create静态方法将一个JavaScript对象作为它的第二个参数。该对象提供了被创建的Error对象的额外信息。注意,argument方法传递了一个字面对象(object literal)作为create方法的第二个参数。该对象设定唯一确定该异常的字符串,以及导致异常的参数名。

Sys.ArgumentException 并没有构造函数,因此不能使用new运算符来对其进行实例化。相反,必须使用JavaScript Error对象的静态函数argument来实例化该异常的实例。

在下面的代码中,当传递给validateInput的参数不能满足正则表达式的要求时,validateInput函数将产生一个Sys.ArgumentException异常。而clickCallback函数将在它的catch块中获取该异常,并将异常对象的message属性的值显示出来。

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC

"-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

<title>Untitled Page</title>

<script language="javascript" type="text/javascript">

function validateInput(input)

{

var reg = new RegExp("(//d//d)[-/](//d//d)[-/](//d//d(?://d//d)?)");

var date = reg.exec(input);

if (date == null)

{

var err = Error.argument("input", "Invalid date!");

throw err;

}

}

function clickCallback()

{

var date = document.getElementById("date");

try

{

validateInput(date.value);

}

catch (e)

{

alert(e.message);

date.value="";

}

}

</script>

</head>

<body>

<form id="form1" runat="server">

<asp:ScriptManager runat="server"

ID="ScriptManager1" />

Enter date: <input type="text" id="date" />&nbsp;

<input type="button" value="Validate"

οnclick="clickCallback()" />

</form>

</body>

</html>

难道是TargetControlID属性指向的是设定为服务器端控件的A导致此异常的?于是便通过服务器端编程设定TargetControlID属性。结果还是如此。

 

于是又想异常指的是控件和行为 值不能为空。感觉可能是A的Href属性编码有问题。试了一下,把绑定前面的一段路径字符串去掉,再看此异常不见了。于是通过服务器端编程,在ItemDataBound事件中对A的Href属性赋值。

HtmlAnchor ssA = e.Item.FindControl("ssA ") as HtmlAnchor;
ssA .Attributes.Add("href", "../default.aspx?ss=" + Server.HtmlEncode(ssA .Name));

问题解决。

 

但是还是很困惑......

希望有朋友知道此问题的原因,请一定告诉我啊!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值