假设我有这个转发器,它在代码隐藏中使用了名为Test的公共函数。
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("MyCol1")%></td>
<td><%# Eval("MyCol2")%></td>
<td><%# Test((int)Eval("MyCol1"))%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
在我的代码隐藏中,我有这个功能
public string Test (int Value)
{
return "Test"+Value.ToString();
}
这很好但在我的网站上我会在各种页面上有类似的中继器,大多数都需要调用Test功能。不是将它放在每个网页的代码隐藏中,而是可以将它放在公共静态类中并直接从转发器中调用它?像这样的东西(不起作用):
<td><%# MyStaticClass.Test((int)Eval("MyCol1"))%></td>
我提出的唯一解决方案是将代码隐藏中的函数更改为:
public string Test (int Value)
{
return MyStaticClass.Test(Value);
}
但如果我不必在每个网页的代码隐藏中放置任何代码(即我希望转发器直接调用静态函数),那就更整洁了。
有任何想法或建议吗?
答案 0 :(得分:2)
为您的网页创建一个基类,并将您的常用功能放在那里。因此它将适用于所有继承的子页面。
答案 1 :(得分:2)
不能
<td><%# Test((int)Eval("MyCol1"))%></td>
由
代表<td><%# Eval("MyCol1", "Test: {0}") %></td>
或者你的测试功能还有更多吗?
答案 2 :(得分:2)
我通常在我的网站中为共享/静态函数创建一个类。然后可以从站点中的任何页面调用此类,并允许从UI或表示代码中分离代码。
clsGlobal.cs
namespace testClass
{
public class clsGlobal
{
public static int EvalNumber(int value){
int localInt = 5;
return localInt + value;
}
}
}
的Default.aspx 备选方案1
此版本将全局类的名称空间导入到aspx页面中,因此您可以在不使用名称空间的情况下引用静态函数。 “clsGlobal.EvelMethod()”
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="testClass._Default" %>
<%@ Import Namespace="testClass" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Static Class Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%= clsGlobal.EvalNumber(5).ToString() %>
</div>
</form>
</body>
</html>
的Default.aspx 备选方案2
此版本使用包含命名空间的完全限定函数名称来调用静态函数。 “testClass.clsGlobal.EvalNumber()”
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="testClass._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Static Class Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%= testClass.clsGlobal.EvalNumber(5).ToString() %>
</div>
</form>
</body>
</html>
答案 3 :(得分:0)
您使用母版页吗?如果你这样做,你可以放在那里。
我会做这样的事情:
在从您需要的母版页继承的每个内容页面上:
<%@ MasterType VirtualPath="[path to your master page]" %>
这允许您访问主服务器上的公共方法。
在您的内容页面上,无论何时需要调用Test方法:
Master.Test([your int value]);
答案 4 :(得分:0)
接受的答案以及此处的其他答案表明,继承是解决此问题的必要条件。这让我很困惑,所以我问自己的问题 - How to call functions in a Class file, when inside a Repeater, without inheritance - 并且感谢 @Walsharoo 我发现我只需要添加项目名称,我可以调用 static < / strong>来自转发器内部的功能(在一个类中):
<td><%# [ProjectName].ClassName.MyStaticFunction(Eval("MyColumnName"))%></td>
这可能对其他人有帮助,我希望,虽然我并没有暗示你因为忘记这个简单的伎俩而像我一样愚蠢。