你能用C#在ASP.NET中发起回发吗?
根据研究,我的问题的答案似乎是响亮的否定 从和来看,似乎唯一的方法就是使用JavaScript。可悲的是,我没有必要的技能水平来实施他们的解决方案,我也不完全确定它是否适合我的情况。看看你怎么想: 我拥有的(在VS2019中使用asp.net和C#)是一个treeview控件,它:你能用C#在ASP.NET中发起回发吗?,c#,asp.net,treeview,postback,C#,Asp.net,Treeview,Postback,根据研究,我的问题的答案似乎是响亮的否定 从和来看,似乎唯一的方法就是使用JavaScript。可悲的是,我没有必要的技能水平来实施他们的解决方案,我也不完全确定它是否适合我的情况。看看你怎么想: 我拥有的(在VS2019中使用asp.net和C#)是一个treeview控件,它: 1.1在第一级,显示客户的名称 1.2展开客户节点,下一级显示该客户的销售订单号列表 1.3展开“销售订单”节点,第三级即最后一级显示属于该特定销售订单的销售项目列表 我可以想象,这是相当标准的东西。现在,另一个
- 1.1在第一级,显示客户的名称
- 1.2展开客户节点,下一级显示该客户的销售订单号列表
- 1.3展开“销售订单”节点,第三级即最后一级显示属于该特定销售订单的销售项目列表
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["_id"] == null)
{
_id = "";
}
else
{
_id = Convert.ToString(ViewState["_id"]);
}
if (!IsPostBack)
{
fillTreeView;
tv.CollapseAll();
}
showFormViews();
}
单击节点时:
protected void tv_SelectedNodeChanged(Object sender, EventArgs e)
{
// (a) PostBack occurs and Page_Load is run *before* _id is set and stored in ViewState
_id = tv.SelectedNode.Value;
ViewState.Add("_id", _id);
showFormViews();
// (b) would be great to be able to fire off a PostBack programmatically right here!
}
(aspx标记只是一个树状视图和三个链接到ObjectDataSources的FormView)
我现在从以下方面了解到:
“页面生命周期的初始化部分将在
导致回发的控件的事件处理程序。因此
页面的Init和Load事件处理程序中的代码将在
事件处理程序中用户单击的按钮的代码。“
如上文第(a)行所述,当单击treeview节点时,页面将被发回,页面加载将在页面id仍然为空时运行。由于_id为null,showFormViews()过程将隐藏所有FormView
然后触发SelectedNodeChanged事件,设置id,ShowFormView()过程将相关formview设置为可见。但当然,现在所有的控件都被渲染了,所以。。。什么也没发生
能够以某种方式在第(b)行发起回发将非常有效。Page_Load将启动并运行showFormViews(),但这一次_id是它应该的
第(b)行的各种变化:
不工作是因为它们破坏了ViewState(除非有人知道不同的情况?),所以_id再次变为null
因此,如果你不能用C#启动回发,如果我不能通过上面的两张海报(或者即使它们在这种情况下是合适的)解决方案,我有没有办法重新构建页面,使这一点——我可以想象这是一种相当常见的模式——起作用(请不要建议MVC——我试着学习了,但仍然做噩梦!)
非常感谢,您可以在页面中调用用于填充视图状态的方法…如:
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["_id"] == null)
{
_id = "";
}
else
{
_id = Convert.ToString(ViewState["_id"]);
tv_SelectedNodeChanged(null, null);
}
if (!IsPostBack)
{
fillTreeView;
tv.CollapseAll();
}
}
您可以在PageLoad中调用用于填充ViewState的方法…如:
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["_id"] == null)
{
_id = "";
}
else
{
_id = Convert.ToString(ViewState["_id"]);
tv_SelectedNodeChanged(null, null);
}
if (!IsPostBack)
{
fillTreeView;
tv.CollapseAll();
}
}
回发只不过是前端代码触发页面的重新加载,运行
页面加载
和aspx中指定的方法。因此在C#代码中,您可以始终执行按钮1_单击(null,null);
或电视选择的nodeChanged(null,null)
来自代码中的某个地方。或者我非常误解了这个问题…嗨,VDWWD,不,你可能没有误解这个问题。我想我误解了这个问题。我不知道为什么,但它刚刚开始工作。我不知道它怎么可能…但它确实可以,这对我来说已经足够好了!非常感谢您的评论和支持我不知道你可以调用Button1_Click(null,null)这样的事件,所以我也在那里学到了一些东西。回发只不过是前端代码触发页面重新加载,运行page_Load
和aspx中指定的方法。所以在C#code中,你总是可以执行Button1_Click(null,null)
或tv\u选择的节点更改(空,空)
来自代码中的某个地方。或者我非常误解了这个问题…嗨,VDWWD,不,你可能没有误解这个问题。我想我误解了这个问题。我不知道为什么,但它刚刚开始工作。我不知道它怎么可能…但它确实可以,这对我来说已经足够好了!非常感谢您的评论和支持我不知道你可以调用Button1\u Click(null,null)这样的事件;所以我在那里也学到了一些东西。嗨,雷纳托,正如我在回复VDWWD上面的评论时所写的那样,它突然开始工作了,我看不出有什么好的理由!非常感谢你的评论,并为我展示了一种方式来调用一个我以前不知道的事件。嗨,雷纳托,正如我在回复VDWWD上面的评论时所写的,它是suddenly所有人都开始工作,我看不出有什么好的理由!非常感谢你的评论,也感谢你给我展示了一种方式来召集我以前不知道的活动。