2

我正在使用带有一些文本框和下拉框的 Gridview。当用户单击一行(文本框或 DDL)时,我想弹出一个 Javascript 警报,告诉他们行号是什么。当用户单击其中一个文本框时,我可以触发一个事件,但我无法告诉他们它在警报中的哪一行,因为我似乎无法弄清楚如何将 C# 变量放入 Javascript警报。

这是我尝试过的:

public void gv_instruments_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
       TextBox txtBox1 = (TextBox)e.Row.FindControl("txt_partNumbers");
       if (txtBox1 != null)
       {
           txtBox1.Attributes.Add("onclick", "javascript:alert('Message')"); //works

           Int32 selectedRow = e.Row.RowIndex;//get row index number
           string message = "You've selected row: " + selectedRow.ToString();
           message = "javascript:alert('" + message + "')";

           //txtBox1.Attributes.Add("onclick", message); //doesn't work 

           string title = "title";
           //ScriptManager.RegisterStartupScript(Page, Page.GetType(), 
                title, "alert('" + message + "');", true); //doesn't work

           //ScriptManager.RegisterClientScriptBlock(Page,Page.GetType(), 
                title, "alert('" + message + "');",true); //doesn't work
            }
        }
    }

我在互联网上找到了使用该"javascript:alert('" + message + "')";构造的页面,但它不起作用(或者至少我无法让它工作)。我一直很小心使用双引号和单引号,我可以在调试器中看到看起来像有效消息的内容(例如: javascript:alert('You've selected row: 0'),我还认为“you've”中的撇号可能是问题所在,所以我删除了那个&用“你有”替换它,但这也不起作用。我可以开始工作的唯一结构是:

txtBox1.Attributes.Add("onclick", "javascript:alert('Message')");

我错过了什么?

4

5 回答 5

3

试试这个

string noofrows = dt.Rows.Count.ToString();
string message = "alert('"+ noofrows +" rows found')";
ScriptManager.RegisterClientScriptBlock((sender as Control), this.GetType(),"alert", message, true);
return;
于 2017-02-26T10:16:48.857 回答
2

如果你把你的 javascript 移到前端,你的代码会干净很多。

这是一个示例,如果您单击文本框,则会显示一个警告框。

在此处输入图像描述

<script type="text/javascript">
    function showMessage(id) {
        alert('You have selected row: ' + id);
    }
</script>        
<asp:GridView runat="server" ID="gv_instruments" 
    OnRowDataBound="gv_instruments_RowDataBound"
    AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField HeaderText="Id" DataField="Id" />
        <asp:BoundField HeaderText="FirstName" DataField="FirstName" />
        <asp:BoundField HeaderText="LastName" DataField="LastName" />
        <asp:TemplateField HeaderText="Click Me">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txt_partNumbers">
                </asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        var collection = new List<User>()
            {
                new User {Id = 1, FirstName = "John", LastName = "Doe"},
                new User {Id = 2, FirstName = "Marry", LastName = "Doe"},
                new User {Id = 3, FirstName = "David", LastName = "Newton"},
            };

        gv_instruments.DataSource = collection;
        gv_instruments.DataBind();
    }
}

public void gv_instruments_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var txtBox1 = (TextBox) e.Row.FindControl("txt_partNumbers");
        if (txtBox1 != null)
        {
            txtBox1.Attributes.Add("onclick", 
              string.Format("showMessage('{0}')", e.Row.RowIndex));
        }
    }
}
于 2013-05-06T21:30:25.947 回答
1

可能它不起作用,因为第二条消息包含单引号。

"You've selected row: "
    ^

试着写

"You&apos;ve selected row: "
于 2013-05-06T21:01:25.953 回答
0

您的问题是由于 "You've" 中的撇号 (') 引起的。您应该转义撇号并使用:“You\'ve selected row:”

于 2013-05-06T21:03:56.030 回答
0

您可以尝试在渲染时使用 ItemIndex 属性填充所有按钮,如下所示:

txtBox1.Attributes.Add(
    "onclick", 
    "javascript:alert('" + e.Item.ItemIndex.ToString() + "')"
    );

在您的示例中的第8行。

于 2013-05-06T21:06:50.023 回答