UpdatePanel中DataList数据不能更新
现象: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;
}
}