这是我的功能(其他线路已经尝试/放弃了)......
function DoClicked(eNumber) {
//obj.style = 'bgcolor: maroon';
var eid = 'cat' + eNumber;
//$get(obj).style.backgroundColor = 'maroon';
//var nObj = $get(obj);
var nObj = document.getElementById(eid)
//alert(nObj.getAttribute("style"));
nObj.style.backgroundColor = 'Maroon';
alert(nObj.style.backgroundColor);
//nObj.setAttribute("style", "backgroundcolor: Maroon");
};
即使在函数的最后一行运行后,此错误仍会继续返回:
Microsoft JScript runtime error: Sys.ArgumentUndefinedException: Value cannot be undefined.
Parameter name: method
在我的Ajax.ActionLink调用(ASP.NET MVC)中设置了“OnSuccess”来调用此函数...任何有关此问题的人都有?我有这些引用...即使我删除正常版本的'调试'版本,我仍然得到一个错误,但错误只是有更少的信息,并说'b'是未定义的(可能是一个ms js库内部变量)。 ..
<script src="../../Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.debug.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.4.1.js" type="text/javascript"></script>
另外,这就是我调用actionlink方法的方法:
Ajax.ActionLink(item.CategoryName, "SubCategoryList", "Home", New With {.CategoryID = item.CategoryID},
New AjaxOptions With {.UpdateTargetId = "SubCat", .HttpMethod = "Post", .OnSuccess = "DoClicked(" & item.CategoryID.ToString & ")"},
New With {.id = "cat" & item.CategoryID.ToString})
答案 0 :(得分:0)
我猜其他东西是否与点击事件有关,也许是在文档本身上?
尝试取消事件(你没有将它传递给那里的函数,但无论触发你的点击都应该有权访问它)。
在jQuery中,你需要类似的东西:
event.preventDefault();
event.stopPropagation(); // this is the important one
编辑:
你不能只是将它们放入函数中;你需要根据你所拥有的任何框架来访问它们。您已经在代码中的单击处理程序中;无论触发该处理程序应该有权访问事件对象。
例如,在jQuery中,你会这样做:
$('el').click(function(e){
e.preventDefault();
e.stopPropagation();
alert('stopped');
});
再次编辑:
是否从AJAX回调中调用了“DoClicked”方法?也就是说,它根本不是“点击”事件?
再次编辑#2:
我很确定我知道发生了什么,如果不是为什么。它期望OnSuccess属性中的函数引用,这是有道理的。我想这个函数会随着POST调用的响应被调用,所以这样的东西会起作用:
OnSuccess = "DoClicked";
function DoClicked(args){
// here, args will (maybe? probably?) represent the response from the POST
}
答案 1 :(得分:0)
嗯,这是我后来发现的答案:
OnSuccess = "function(){DoClicked(" & item.CategoryID.ToString & ");}"
所以,当你通过OnSuccess或OnComplete调用你的函数时,你只需要将它包含在"function() {...}"
声明中,你就可以了。
有趣的是,vs队并没有将其作为一种“正确规范”的做事方式,但是当它正常通过时,它是如此的挑剔和暧昧。在VS2010 RTM上浪费了4个小时 - 这是令人沮丧的。当然,这是一个他们没有努力解决的错误,因为它已经存在了一段时间。