我在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没有被初始化,这是预期的:
出于测试目的,我决定不再使用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() %>";
}
现在这完全是奇怪的:
注释行抛出一个异常,好像注释的代码实际上是由网站运行的。我尝试重新启动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;
}
答案 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() %>';