2

asp.net c#Webアプリケーションを作成しています。グリッドビューの各行の最初の列にlinkBut​​ton(lnkDelete)があります。また、GridViewの「RowDataBound」イベント内のリンクボタンに属性を動的に追加しています。次のように:

  lnkDelete.Attributes.Add("onclick", "javascript:return confirm('Are you sure you want to   delete this Product :" +
                    DataBinder.Eval(e.Row.DataItem, "ProductName") + "')");

今私がやろうとしているのは、ユーザーがそのリンクボタンをクリックすると、JavaScriptの確認ポップアップが開き、「この製品を削除してもよろしいですか」と尋ねることです。すべてがうまく機能します。ただし、製品名に引用符が付いていると問題が発生します。Like:Product'One。lnkDeleteをクリックしてエラーが:(不正な文字)の場合、構文エラーはErrorConsole(javascript)で発生します。問題は一重引用符であることがわかっています。

上記のコードで必要な変更を教えてください。はっきりしているといいのですが。

4

4 に答える 4

6

\一重引用符で追加してみませんか?

DataBinder.Eval(e.Row.DataItem, "ProductName").ToString.Replace("'", "\\'")
于 2012-10-05T05:37:35.780 に答える
0

HttpUtility.HtmlEncodeを使用します

それ以外のDataBinder.Eval(e.Row.DataItem, "ProductName")

使用できます

HttpUtility.HtmlEncode(DataBinder.Eval(e.Row.DataItem, "ProductName").ToString())

于 2012-10-05T05:43:13.230 に答える
0

文字列をエスケープしてみましたか?

エスケープされた文字列がある場合は、javascriptを使用してエスケープを解除できます。

lnkDelete.Attributes.Add("onclick", "javascript:return confirm('Are you sure you want to  delete this Product :' + unescape(\'" + escapedString + "\'))");
于 2012-10-05T05:51:37.333 に答える
0

検索プロジェクト用の自動化ツールの1つで同様のことを行いました。試すことができるものは次のとおりです。

protected void grdKeywords_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            LinkButton linkDeleteButton = e.Row.FindControl("lnkdel") as LinkButton;
            Label lblGridKeyword = e.Row.FindControl("lblGridKeyword") as Label;
            TextBox txtGridBox = e.Row.FindControl("txtGridKeyword") as TextBox;

            if (lblGridKeyword != null)
            {
                if (lblGridKeyword.Text.Contains("'"))
                {
                    lblGridKeyword.Text = lblGridKeyword.Text.Replace("'", "'");

                }
            }

            if (txtGridBox != null)
            {
                if (txtGridBox.Text.Contains("'"))
                {
                    txtGridBox.Text = txtGridBox.Text.Replace("'", "`");
                }
            }

            if (txtGridBox == null)
                linkDeleteButton.Attributes.Add("onclick", "javascript:return confirm('Are you sure about deleting keyword: " + lblGridKeyword.Text + " ?')");
            else if (lblGridKeyword == null)
                linkDeleteButton.Attributes.Add("onclick", "javascript:return confirm('Are you sure about deleting keyword: " + txtGridBox.Text + " ?')");




        }
    }

lblGridKeywordは、一重引用符を含むデータを保持するラベルです。RowDataBoundの時点で'を使用して置き換えました。これは私のために働いた。

于 2012-10-05T05:53:08.673 に答える