ASP.Net Javascript代码抛出奇怪的异常(甚至在评论时!)

时间:2014-10-20 08:51:05

标签: javascript c# asp.net devexpress

我在ASP的网站上工作,我在HEAD部分使用Javascript代码。 我试图实现自己的上下文菜单,所以我在本节中为它编写了逻辑。我的代码如下:

function fileGridGrouping_ContextMenu(s, e) {
       if(e.objectType != "row") return;
       fileGridGrouping.SetFocusedRowIndex(e.index);
       lastFileId = "<%# fileGridGrouping.GetRowValues(fileGridGrouping.FocusedRowIndex, "ID").ToString() %>";
    }

如您所见,我还在后台调用了一些C#代码,用于获取所选行的ID。下面的代码抛出一个异常,如果FocusedRowIndex没有被初始化,这是预期的:

First exception

出于测试目的,我决定不再使用FocusedRowIndex,而是始终获得第一行:

function fileGridGrouping_ContextMenu(s, e) {
       if(e.objectType != "row") return;
       fileGridGrouping.SetFocusedRowIndex(e.index);
       lastFileId = "<%# fileGridGrouping.GetRowValues(0, "ID").ToString() %>";
    }

此代码不会抛出任何异常,这确实证明问题来自FocusedRowIndex未初始化(因此设置为-1)。够了!我决定很容易解决它:

function fileGridGrouping_ContextMenu(s, e) {
       if(e.objectType != "row") return;
       fileGridGrouping.SetFocusedRowIndex(e.index);
       if ("<%# fileGridGrouping.FocusedRowIndex %>" <= 0) return;
       lastFileId = "<%# fileGridGrouping.GetRowValues(0, "ID").ToString() %>";
    }

但是,令人惊讶的是,在完全相同的位置抛出相同的异常。 作为最后一次了解究竟发生了什么的尝试,我决定评论罪魁祸首:

function fileGridGrouping_ContextMenu(s, e) {
       if(e.objectType != "row") return;
       fileGridGrouping.SetFocusedRowIndex(e.index);
       if ("<%# fileGridGrouping.FocusedRowIndex %>" <= 0) return;
       //lastFileId = "<%# fileGridGrouping.GetRowValues(fileGridGrouping.FocusedRowIndex, "ID").ToString() %>";
    }

现在这完全是奇怪的:

Weird exception

注释行抛出一个异常,好像注释的代码实际上是由网站运行的。我尝试重新启动Visual Studio,从头开始重建所有内容,但同样的事情一次又一次地发生。

为了增加奇怪性,所有这些代码都是在实际发生任何点击之前运行的,但是当页面加载时。当在页面中的表上进行右键单击时,应该调用函数fileGridGrouping_ContextMenu(),但是在实际发生任何事情之前运行此代码。我猜测那里有某种编辑或类似的东西?

我不知道发生了什么,也不清楚如何修复它。

编辑:我现在通过更改大部分代码来修复此问题。事实证明,我没有使用最好的功能去做我想做的事情。哎呀。感谢所有帮助过我的人! 这是工作代码:

function fileGridGrouping_ContextMenu(s, e) {
       if(e.objectType != "row") return;
       fileGridGrouping.SetFocusedRowIndex(e.index);
       fileGridGrouping.GetRowValues(fileGridGrouping.GetFocusedRowIndex(), "ID", OnGetRowValues);
    }

    function OnGetRowValues(value) {
        lastFileId = value;
    } 

2 个答案:

答案 0 :(得分:2)

你有一些不正确的嵌套引号,在这里:

"<%# fileGridGrouping.GetRowValues(fileGridGrouping.FocusedRowIndex, "ID").ToString() %>";
//                                   See the syntax highlighting here ^

将该行替换为:

'<%# fileGridGrouping.GetRowValues(fileGridGrouping.FocusedRowIndex, "ID").ToString() %>';

(注意最后一行中的单引号(&#39; ))

在注释行时,您仍然会收到错误的原因是这些块中的任何代码:<%# %>都在服务器端运行。它基本上不关心前面的JavaScript注释。

答案 1 :(得分:1)

我认为你的问题是你有一个Null值:

fileGridGrouping.GetRowValues(fileGridGrouping.FocusedRowIndex, "ID") //return Null
(Null).ToString() //Exception

尝试使用此行:

'<%# (fileGridGrouping.GetRowValues(fileGridGrouping.FocusedRowIndex, "ID") ?? "").ToString() %>';