如果是那么ASP.net LinkBut​​tion

时间:2012-08-24 20:39:27

标签: asp.net gridview datagridview linkbutton commandargument

嘿,我在这里有这段代码:

<asp:TemplateField>
   <ItemTemplate>
       <asp:LinkButton CommandArgument='<%#Eval("id") & "|" & Eval("theName")%>' runat="server" Text='<%#Eval("status")%>' CommandName='<%#Eval("status")%>' ID="statusLink" />
   </ItemTemplate>
</asp:TemplateField>

如果它表示“状态”,它将被“拒绝”,“待定”或“批准”。问题是,如果已批准已拒绝已批准的链接不同,我怎么能没有链接?

我目前以这种方式检查点击次数:

Protected Sub grdView_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grdView.RowCommand
    Dim command As String = e.CommandName.ToString
    Dim theName() As String = Split(e.CommandArgument.ToString, "|")
    Dim cid As String = theName(0)

    If cid.Length <= 0 Then Exit Sub

    Select Case command
        Case "PENDING"
            Response.Redirect("/account/Req.aspx?ID=" & cid & "&ACCEPT=yes&NAME=" & theName(1))
        Case "REJECTED"
            Response.Redirect("/account/Req.aspx?ID=" & cid & "&ACCEPT=no&NAME=" & theName(1))
    End Select
End Sub

所以,如果一个记录是这样的:

 Bob | Barker | Bob@priceisright.com | PENDING (Approve | Reject)

然后用户可以通过按任一链接选择批准或拒绝该人。

如果它已被批准,那么它应该是这样的:

 Bob | Barker | Bob@priceisright.com | Approve!

......没有任何关联。

任何帮助都会很棒!

更新

也许更好的替代方法是动态创建asp链接按钮。但是你如何将它们插入到页面上的正确位置?

1 个答案:

答案 0 :(得分:1)

快速,非常快速的解决方法 - 但它不会在批准后不显示链接为简单文本,如下所示:

<asp:TemplateField>
   <ItemTemplate>
       <asp:LinkButton 
     OnClientClick='<%#Eval("status")=="Approved"?"javascript:return false;":""%>'
    CommandArgument='<%#Eval("id") & "|" & Eval("theName")%>' runat="server" Text='<%#Eval("status")%>' CommandName='<%#Eval("status")%>' ID="statusLink" />
   </ItemTemplate>
</asp:TemplateField>

这样做是通过从Javascript函数调用返回false来禁用状态被批准时的表单提交。否则,它会回发到服务器。

更新:

这是完整的解决方案,使“已批准”链接按钮仅显示文本;没有回复或超链接:

<asp:TemplateField>
   <ItemTemplate>
       <asp:LinkButton 
     name='<%#Eval("status") %>'
    CommandArgument='<%#Eval("id") & "|" & Eval("theName")%>' runat="server" Text='<%#Eval("status")%>' CommandName='<%#Eval("status")%>' ID="statusLink" />
   </ItemTemplate>
</asp:TemplateField>

现在,您只需在Window.load上调用JS函数即可从名为hrefs的元素中删除所有Approved

<script>
    window.onload = function () {    
        //get elements with name Approved
        var aprovedLinks = document.getElementsByName("Approved");
        for (var i = 0; i < aprovedLinks.length; i++) {
            //remove the hyperlink
            aprovedLinks[i].removeAttribute("href", 0);
        }
    };
</script>