动态构建超链接但还需要执行其他操作

时间:2013-03-12 18:43:06

标签: c# asp.net asp.net-4.0

我正在通过存储过程调用在asp.net网页(弹出窗口)上填充转发器。我有一个列,我需要根据动态值构建超链接,调用回调到我的原始Web表单。但是,我遇到的麻烦是当我点击链接时,我还需要检索一些其他数据并将这些数据插入到viewstate中。

我调用的“GetListOfValues”函数显然无法按照我编码的方式工作。有没有办法实现这一点,甚至可能比我试图做的更好?

这是我的例子:

Default.aspx的

<asp:Repeater ID="rptReport" runat="server">
        <HeaderTemplate>
            <table>
                <tr>
                    <td>Name</td>
                    <td>ID</td>
                    <td>Value1</td>
                    <td>Value2</td>
                </tr>
        </HeaderTemplate>
        <ItemTemplate>
                <tr>
                    <td><%# DataBinder.Eval(Container.DataItem,"Name") %></td>
                    <td><%# DataBinder.Eval(Container.DataItem,"ID") %></td>
                    <td><%# DataBinder.Eval(Container.DataItem,"Value1") %></td>
                    <td><%# GetValueTwoLink(Eval("Name"),Eval("Value2") %></td>
                </tr>
        </ItemTemplate>
        <FooterTemplate>
                 <tr>
                     <%--This area holds totals for columns--%>
                 </tr>
            </table>
        </FooterTemplate>
    </asp:Repeater>

Default.aspx.cs

    protected string GetValueTwoLink(object name, object value2)
    {
        ViewState["ListOfValues"] = datalayer.GetListOfValues(name, value2);

        return string.Format(
            "<a href=\"#\" onlick=\"window.opener.ViewValues('{0}')\">{1}</a>",
            name,
            Convert.ToInt32(value2).ToString("d"));

    }

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

不完全确定你要用onclick做什么......但是你可以在代码前面做到这一点:

 <ItemTemplate>
     <tr>
         <td><%# Eval("Name") %></td>
         <td><%# Eval("ID") %></td>
         <td><%# Eval("Value1") %></td>
         <td>
             <a href="#" 
                 onclick="<%# String.Format("window.opener.ViewValues('{0}')", DataBinder.Eval(Container.DataItem,"Name")) %>">
                 <%# Convert.ToInt32(DataBinder.Eval(Container.DataItem, "Value2")).ToString("d")%>
             </a>
         </td>
     </tr>
 </ItemTemplate>

另外,如您所见,您可以使用

<%# Eval("Name") %>

而不是

<%# DataBinder.Eval(Container.DataItem,"Name") %>

只显示数据。当您需要进行某些操作时,可以使用DataBinder.Eval,例如第4 <td>页。