Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET代码中的Javascript警报中插入C#字符串变量_C#_Javascript_Asp.net - Fatal编程技术网

在ASP.NET代码中的Javascript警报中插入C#字符串变量

在ASP.NET代码中的Javascript警报中插入C#字符串变量,c#,javascript,asp.net,C#,Javascript,Asp.net,我正在使用一个Gridview,其中包含一些文本框和一个下拉框。当用户单击一行(文本框或DDL)时,我想弹出一个Javascript警报,告诉他们行号是什么。当用户单击其中一个文本框时,我可以触发一个事件,但我无法告诉他们它在警报中的哪一行,因为我似乎不知道如何将C#变量放入Javascript警报中 以下是我尝试过的: public void gv_instruments_RowDataBound(object sender, GridViewRowEventArgs e) { if

我正在使用一个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's selected row:0')
,我还认为“You've”中的撇号可能是问题所在,所以我删除了它并将其替换为“You have”,但这也不起作用。我唯一可以开始工作的结构是:

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


我遗漏了什么?

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

"You've selected row: "
    ^
试着写

"You've selected row: "

出现问题的原因是“You've”中的撇号(')。您应该转义撇号并使用:“You've selected row:”

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

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

在您的示例中的第8行。

如果您将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));
        }
    }
}


函数showMessage(id){
警报(“您已选择行:”+id);
}
公共类用户
{
公共int Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
var集合=新列表()
{
新用户{Id=1,FirstName=“John”,LastName=“Doe”},
新用户{Id=2,FirstName=“mary”,LastName=“Doe”},
新用户{Id=3,FirstName=“David”,LastName=“Newton”},
};
gv_instruments.DataSource=采集;
gv_仪器。数据绑定();
}
}
public void gv_instruments_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
var txtBox1=(TextBox)e.Row.FindControl(“txt_零件号”);
如果(txtBox1!=null)
{
txtBox1.Attributes.Add(“onclick”,
Format(“showMessage('{0}')”,e.Row.RowIndex));
}
}
}
试试这个

string noofrows = dt.Rows.Count.ToString();
string message = "alert('"+ noofrows +" rows found')";
ScriptManager.RegisterClientScriptBlock((sender as Control), this.GetType(),"alert", message, true);
return;

这很糟糕。你应该将前端逻辑留给前端。为什么不在HTML中添加javascript代码,以便在表行单击时侦听,然后显示相应的消息呢?谢谢,但正如OP中所指出的,这不是问题。谢谢,但正如OP中所指出的,这不是问题。奇怪的是,如果你离开,我肯定你会这样做单引号不起作用,因为在这个例子中有很多问题。你可以尝试使用Unicode\u0027转义字符吗?请参阅《感谢链接和建议》中的类似问题。我尝试使用Unicode字符串,但当我单击文本框时仍然一无所获。因此,我在其中尝试了一个简单的字符串,瞧,它是w因此,我将行号添加到简单字符串中(只有五个随机的字母字符),这也很有效。因此我认为它一定是原始字符串中的其他内容,我消除了冒号、空格等作为罪魁祸首。现在我使用“You have selected row:+selectedRow.ToString();这是有效的。我仍然感到困惑,因为我看不到有什么变化这么大。谢谢你的建议,但这并不是我所需要的。谢谢你的回答和你做的所有工作,我很感激。虽然我有一个有效的解决方案,但我想合并你的方法,因为我同意它们更干净。再次感谢你一旦我完成注册,我会接受你的回答。