Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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
C# ASP.NET Repeater:项目模板中重定向到其他页面的按钮_C#_Asp.net_Repeater - Fatal编程技术网

C# ASP.NET Repeater:项目模板中重定向到其他页面的按钮

C# ASP.NET Repeater:项目模板中重定向到其他页面的按钮,c#,asp.net,repeater,C#,Asp.net,Repeater,我有一个转发器,每个项目都包含一个按钮,该按钮应该重定向到另一个页面,并在查询字符串中传递一个值 我没有收到任何错误,但当我单击按钮时,页面只会刷新(因此我假设会发生回发),并且不会重定向。我认为出于某种原因,它无法识别按钮的CommandName 中继器代码: 我对使用中继器还不熟悉,所以这可能只是新手犯的错误。另一方面:有没有更好的方法不使用隐藏字段来获取ChildID 编辑:使用断点;正在命中ItemDatabound事件处理程序,但根本没有输入ItemCommand我认为您需要在中继器

我有一个转发器,每个项目都包含一个按钮,该按钮应该重定向到另一个页面,并在查询字符串中传递一个值

我没有收到任何错误,但当我单击按钮时,页面只会刷新(因此我假设会发生
回发
),并且不会重定向。我认为出于某种原因,它无法识别按钮的
CommandName

中继器代码:


我对使用中继器还不熟悉,所以这可能只是新手犯的错误。另一方面:有没有更好的方法不使用隐藏字段来获取ChildID

编辑:使用断点;正在命中ItemDatabound事件处理程序,但根本没有输入ItemCommand

我认为您需要在中继器上添加

OnItemDataBound=“myponsoredchildrenlist\u ItemDataBound”

不是100%确定,但ItemCommand的情况可能相同

--


关于获得儿童身份证。向中继器中的按钮添加一个
CommandArgument
,并以相同的方式设置它,
。这可以通过使用
e.CommandArgument

来获得。试试这个。。向项目行添加属性

row.Attributes["onclick"] = string.Format("window.location = '{0}';", ResolveClientUrl(string.Format("~/YourPage.aspx?userId={0}", e.Item.DataItem)) ); 
或者你也可以这样做

<ItemTemplate>      <tr onmouseover="window.document.title = '<%# Eval("userId", "Click to navigate onto user {0} details page.") %>'"          onclick='window.location = "<%# ResolveClientUrl( "~/YourPage.aspx?userId=" + Eval("userid") ) %>"'>           <td>                <%# Eval("UserId") %>           </td>      </tr> </ItemTemplate> 

您需要将MySponsoredChildrenList\u ItemDataBound设置为受保护。现在,您只有“void”,默认情况下它是私有的,不能访问aspx首页

另一种方法是使用+=运算符从代码隐藏中的函数中使用add事件处理程序语法

无论哪种方式,断点现在都会被命中,我们的代码应该可以正常工作了

EDIT:因此上述方法解决了编译错误,但未命中断点;我已经运行了一些测试,并且能够命中如下断点:

由于我不知道您是如何进行数据绑定的,我只是将以下代码添加到我的代码隐藏中:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            MySponsoredChildrenList.DataSource = new List<object>() { null };
            MySponsoredChildrenList.DataBind();
        }
    }
执行FindControl时,需要强制转换为正确的控件类型,并且在转换之前确保检查空值和空值,否则可能会出现错误:

    protected void MySponsoredChildrenList_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "ViewProfile")
        {
            int childId = 0;
            var hiddenField = e.Item.FindControl("ChildID") as HiddenField;
            if (null != hiddenField)
            {
                if (!string.IsNullOrEmpty(hiddenField.Value))
                {
                    childId = Convert.ToInt32(hiddenField.Value);
                }
            }

            if (childId > 0)
            {
                Response.Redirect("~/ChildDescription.aspx?ID=" + childId);
            }
        }

    }

希望这对您有所帮助-如果没有,请发布更多代码以“全面了解”正在发生的情况,这样我们就可以看到您可能遇到的其他问题。

您是否在事件处理程序的开头设置了断点?它被击中了吗?
e.CommandName
的计算结果是什么?单击时是否出现任何错误。仅尝试了一下,似乎没有调用任何事件处理程序。将onClick属性添加到任一事件的按钮会导致在加载页面时出错@Black_Crown:单击时没有错误,页面似乎在回发和刷新,它必须显示一些错误。您在浏览器中尝试过FireBug吗?您在哪里注册了
ItemCommand
事件处理程序?刚刚尝试过这个,但它给我一个编译错误(请参阅有问题的编辑)听起来可能很明显,但当您说“代码隐藏”时,你是说myponsoredchildren.aspx.cs文件,而不是App_Code文件夹中的类文件?不应该有任何区别,但在您的示例中,ItemDataBound只是无效的,不受保护。只是想在这里找些东西看看……)我将其更改为protected,解决了我遇到的编译错误,但仍然只是回发和刷新页面:/感谢您的帮助,到目前为止,您在哪里绑定转发器?如果它在每次回发时都重新绑定到数据源,那么按钮所做的一切都将丢失。如果(!IsPostback)在
页面_Load
中,您需要添加
if(!IsPostback)
?很抱歉,我对asp一般来说都很陌生,谢谢你的帮助。这解决了编译错误,但断点仍然没有被击中:/感谢你迄今为止的帮助+1解决编译错误编辑:itemDataBound正在被击中,但itemCommand没有被击中。你还没有将代码发布到你在中继器上的DataBind()位置;我刚刚将它传递给了我自己的应用程序,并将一些代码添加到一个虚拟的数据绑定中,它就可以工作了。MySponsoredChildrenList_ItemCommand方法中也存在错误。请参阅我的扩展答案,其中解释了为什么总是命中ItemDataBound而从未命中ItemComment-您很可能在每次回发时都绑定了数据,并清除了命令参数。仅在初始页面加载时尝试数据绑定(有关详细信息,请参阅我的编辑)。我选择了您的答案,因为它涉及更多详细信息,并将帮助其他有相同问题的人。再次感谢您的帮助:)
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            MySponsoredChildrenList.DataSource = new List<object>() { null };
            MySponsoredChildrenList.DataBind();
        }
    }
    protected void MySponsoredChildrenList_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "ViewProfile")
        {
            int ChildIDQuery = Convert.ToInt32(e.Item.FindControl("ChildID"));
            Response.Redirect("~/ChildDescription.aspx?ID=" + ChildIDQuery);
        }

    }
    protected void MySponsoredChildrenList_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "ViewProfile")
        {
            int childId = 0;
            var hiddenField = e.Item.FindControl("ChildID") as HiddenField;
            if (null != hiddenField)
            {
                if (!string.IsNullOrEmpty(hiddenField.Value))
                {
                    childId = Convert.ToInt32(hiddenField.Value);
                }
            }

            if (childId > 0)
            {
                Response.Redirect("~/ChildDescription.aspx?ID=" + childId);
            }
        }

    }