0

ねえ、私はここにこのコードを持っています:

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

また、「ステータス」と表示されている場合は、「REJECTED」、「PENDING」、または「APPROVED」のいずれかになります。問題は、APPROVED と表示されているのにREJECTEDAPPROVEDのリンクが異なる場合、どうすればリンクを持てないのでしょうか?

現在、この方法でクリックを確認しています。

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

したがって、1 つのレコードが次のようになっているとします。

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

次に、ユーザーは、いずれかのリンクを押して、その人を承認または拒否するかを選択できます。

すでに承認されている場合は、次のようになります。

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

……何にも縛られずに。

どんな助けでも素晴らしいでしょう!

アップデート

おそらく、これに代わるより良い方法は、asp リンクボタンを動的に作成することです。しかし、どのようにしてそれらをページの正しい場所に挿入するのでしょうか?

4

1 に答える 1

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 関数を呼び出すだけで、hrefsname を持つ from 要素をすべて削除できます。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>
于 2012-08-24T21:16:19.497 に答える