JavaScript一直在返回错误的错误(在ASP.NET MVC 2.0中)

时间:2010-04-30 12:01:32

标签: c# asp.net javascript asp.net-mvc asp.net-ajax

这是我的功能(其他线路已经尝试/放弃了)......

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})

2 个答案:

答案 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个小时 - 这是令人沮丧的。当然,这是一个他们没有努力解决的错误,因为它已经存在了一段时间。