我在javascript中写了这个函数
function CheckBeforeAddNew(btnId, gridSelected) {
$(btnId).click(function () {
for (var i in gridSelected) {
return true;
};
Ext.Msg.alert('Add', 'Can not do without selected item');
{
return false;
};
});
};
当我试图让这个功能到达按钮时点击这样:
<ext:Button runat="server" ID="btnAddNewToMme" Cls="topButton" Text="Add new" Icon="Add" OnDirectClick="btnAddNewToMme_OnDirectClick">
<DirectEvents>
<Click Before="CheckBeforeAddNew('#<%= btnAddNewToMme.ClientID%>','<%=dlOuterObject.Grid_ClientID %>.selectedIds')"></Click>
</DirectEvents>
</ext:Button>
我收到错误ReferenceError: $ is not defined
$(btnId).click(function () {
如何调用此功能才能使其正常工作?
修改
当然,我将带有此功能的文件添加到我的.aspx
<script type="text/javascript" src="Scripts/Synchronization.js"></script>
EDIT1: 在萤火虫中,我可以在其他任何事情之前看到
<script type="text/javascript" src="Scripts/jquery-1.4.1.min.js"></script>
所以jQuery正确加载
EDIT2: 我对@geoffrey提供的功能进行了修改:
var CheckBeforeAddNew = function (gridSelected) {
for (var i in gridSelected) {
return true;
}
Ext.Msg.alert('Error', 'Something wrong!');
return false;
};
但是使用它
<ext:Button runat="server" ID="btnAddNewToMme" Cls="topButton" Text="Add new" Icon="Add" OnDirectClick="btnAddNewToMme_OnDirectClick">
<DirectEvents>
<Click Before="return CheckBeforeAddNew('<%= dlOuterObject.Grid_ClientID %>.selectedIds');"></Click>
</DirectEvents>
</ext:Button>
我无法做到这一点:
if (grid.getSelectionModel().getCount() < 1) {
Ext.Msg.alert('Error', 'Please select an Item');
return false;
}
我的dlOuterObject是UserControl
,其中包含网格。那么任何想法如何使其发挥作用?
感谢您的帮助:)
答案 0 :(得分:1)
原始代码示例存在一些问题。
此<%= btnAddNewToMme.ClientID%>
语法在ASP.NET标记配置中不起作用。您需要使用<%# %>
DataBinding语法。
您的CheckBeforeAddNew
JavaScript函数不使用btnId
,因此您不需要传递此函数。
您也不需要使用任何jQuery。所有必需的功能都包含在ExtJS
框架中,该框架已包含在Page
中。
只需将GridPanel
的实例传递到JavaScript函数中,然后封装逻辑以获取/检查函数中的Selected Item计数。
这是一个功能齐全的示例,演示了使用Ext.NET 2.0的场景。如果您使用的是v1.x,则代码.Before
处理程序基本相同,只是GridPanel模型配置会略有不同。
示例强>
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
var store = this.GridPanel1.GetStore();
store.DataSource = this.Data;
store.DataBind();
}
}
private object[] Data
{
get
{
return new object[]
{
new object[] { "3m Co" },
new object[] { "Alcoa Inc" },
new object[] { "Altria Group Inc" },
new object[] { "American Express Company" },
new object[] { "American International Group, Inc." },
new object[] { "AT&T Inc." },
new object[] { "Boeing Co." },
new object[] { "Caterpillar Inc." },
new object[] { "Citigroup, Inc." },
new object[] { "E.I. du Pont de Nemours and Company" },
new object[] { "Exxon Mobil Corp" },
new object[] { "General Electric Company" }
};
}
}
protected void Button1_Click(object sender, DirectEventArgs e)
{
X.Msg.Notify("Message", "Button1 Clicked").Show();
}
</script>
<!DOCTYPE html>
<html>
<head runat="server">
<title>Simple Array Grid - Ext.NET Examples</title>
<script type="text/javascript">
var checkSelected = function (grid) {
if (grid.getSelectionModel().getCount() < 1) {
Ext.Msg.alert('Error', 'Please select an Item');
return false;
}
return true;
};
</script>
</head>
<body>
<ext:ResourceManager runat="server" />
<ext:GridPanel
ID="GridPanel1"
runat="server"
Title="Example"
Width="600"
Height="350">
<Store>
<ext:Store runat="server">
<Model>
<ext:Model runat="server">
<Fields>
<ext:ModelField Name="company" />
</Fields>
</ext:Model>
</Model>
</ext:Store>
</Store>
<ColumnModel>
<Columns>
<ext:Column runat="server" Text="Company" DataIndex="company" Flex="1" />
</Columns>
</ColumnModel>
<SelectionModel>
<ext:RowSelectionModel runat="server" Mode="Multi" />
</SelectionModel>
<Buttons>
<ext:Button runat="server" Text="Submit" Icon="Accept">
<DirectEvents>
<Click OnEvent="Button1_Click" Before="return checkSelected(App.GridPanel1);" />
</DirectEvents>
</ext:Button>
</Buttons>
</ext:GridPanel>
</body>
</html>
希望这有帮助。