UpdatePanel中DataList数据不能更新

jean9997 2010-04-29 10:13:54
现象:DataList在UpdatePanel中,页面初始化,DataList显示(初始化),插入(或修改)一条数据,DataList数据绑定后,DataList数据更新,但这时触发ItemCommand,DataList却变成页面初始化数据。代码如下:
前台:
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/RestaurantMaster.master"
AutoEventWireup="true" CodeBehind="DishKindEdit.aspx.cs" Inherits="EFANW.RSpace.DishKindEdit" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

<script src="../Js/Common.js"></script>

<script type="text/javascript">
function ConfirmSave()
{
if ($get("<% =txtDishKind.ClientID %>").value == "")
{
$get("lblDishKingMsg").innerHTML = "请填写菜单类别。";
goon = false;
}
else
{
$get("lblDishKingMsg").innerHTML = "";
goon = true;
}
window.event.returnValue = goon;
}
</script>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="btnAdd" runat="server" Text="添加" OnClick="btnAdd_Click" />
<asp:DataList ID="dlDishKindList" runat="server" DataKeyField="DishKindID" OnItemCommand="dlDishKindList_ItemCommand">
<HeaderTemplate>
菜单类别(点击进入编辑该类菜谱)\排序\编辑\删除
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton ID="lbtnKindName" runat="server" Text='<%# ((EFANW.Model.DishKindModel)Container.DataItem).KindName%>'
CommandName="EditDish" CommandArgument='<%# ((EFANW.Model.DishKindModel)Container.DataItem).DishKindID %>'></asp:LinkButton>
<asp:Label ID="lblSequence" runat="server" Text='<%# ((EFANW.Model.DishKindModel)Container.DataItem).Sequence%>'></asp:Label>
<asp:ImageButton ID="ibtnEdit" ImageUrl="../App_Themes/Image/edit.gif" CommandName="EditDishKind"
CommandArgument='<%# ((EFANW.Model.DishKindModel)Container.DataItem).DishKindID %>'
runat="server" />
<asp:ImageButton ID="ibtnDel" ImageUrl="../App_Themes/Image/delete.gif" OnClientClick="window.event.returnValue = confirm('删除此菜单类别,同时也将删除属于此类的菜单,确定删除菜单类别?')"
CommandName="DelDishKind" CommandArgument='<%# ((EFANW.Model.DishKindModel)Container.DataItem).DishKindID %>'
runat="server" />
</ItemTemplate>
</asp:DataList>
<asp:HiddenField ID="hifDishKindID" runat="server" />
<asp:Panel Visible="false" ID="pnlKind" runat="server">
菜单类别:<asp:TextBox ID="txtDishKind" runat="server"></asp:TextBox>
  菜单排序:<asp:TextBox onkeypress="PressKeyINT()" ID="txtSequence" runat="server"></asp:TextBox><span>请输入整数</span>
  
<asp:Button ID="btnSave" OnClientClick="ConfirmSave()" runat="server" Text="保存"
OnClick="btnSave_Click" />
<asp:Button ID="btnCancle" runat="server" Text="取消" OnClick="btnCancle_Click" />
<span id="lblDishKingMsg"></span>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>

后台:
public partial class DishKindEdit : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindDishKind();
}
}

private void BindDishKind()
{
dlDishKindList.DataSource = new DishKindBLL().GetListByRestaurantID(RestaurantID.RestaurantID);
dlDishKindList.DataBind();
}

protected void dlDishKindList_ItemCommand(object source, DataListCommandEventArgs e)
{
switch (e.CommandName)
{
case "EditDishKind":
int index = e.Item.ItemIndex;
txtDishKind.Text = ((LinkButton)dlDishKindList.Items[index].FindControl("lbtnKindName")).Text;
txtSequence.Text = ((Label)dlDishKindList.Items[index].FindControl("lblSequence")).Text;
hifDishKindID.Value = dlDishKindList.DataKeys[index].ToString();

pnlKind.Visible = true;
break;
case "DelDishKind":
new DishKindBLL().Delete(new Guid(e.CommandArgument.ToString()));
BindDishKind();
break;
case "EditDish":
Server.Transfer("DishEdit.aspx?id=" + e.CommandArgument.ToString() + "&n=" + ((Label)dlDishKindList.Items[e.Item.ItemIndex].FindControl("lblKindName")).Text, false);
break;
default:
break;
}
}

protected void btnAdd_Click(object sender, EventArgs e)
{
hifDishKindID.Value = Guid.NewGuid().ToString();
txtDishKind.Text = string.Empty;
txtSequence.Text = string.Empty;
pnlKind.Visible = true;
}

protected void btnSave_Click(object sender, EventArgs e)
{
DishKindModel model = new DishKindModel();
model.DishKindID = new Guid(hifDishKindID.Value);
model.KindName = txtDishKind.Text;
model.RestaurantID = RestaurantID.RestaurantID;
if (txtSequence.Text != string.Empty)
{
model.Sequence = int.Parse(txtSequence.Text);
}
new DishKindBLL().AddOrUpdateByKey(model);
BindDishKind();
pnlKind.Visible = false;
}

protected void btnCancle_Click(object sender, EventArgs e)
{
pnlKind.Visible = false;
}
}
...全文
244 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jean9997 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sp1234 的回复:]
跟踪一下你的 hifDishKindID ,看看值对么?

不要随便使用 hiddenfield 控件,应该使用ViewState集合来保存数据。
[/Quote]
hiddenfield的数据是没错的~~~~~~不想使用太多的viewstate,访问的人太多,服务器内存怕吃不消。
  • 打赏
  • 举报
回复
你的代码太复杂了。关于新增的控制方式,可以参考Scott Mitchell的入门教程来写(他已经写的够复杂了):

http://www.cnblogs.com/eddie005/archive/2006/08/18/eventsofdatawebcontrol.html
  • 打赏
  • 举报
回复
跟踪一下你的 hifDishKindID ,看看值对么?

不要随便使用 hiddenfield 控件,应该使用ViewState集合来保存数据。
灵雨飘零 2010-04-30
  • 打赏
  • 举报
回复
友情帮顶,
是不是UpdataPanel嵌套的位置不对?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧