DetailsView - ItemUpdating 中的值未更改
DetailsView - Values not changing in ItemUpdating
我将 DetailsView 绑定到一个对象。当调用 ItemUpdating
时(当我点击更新时)OldValues
为空并且 NewValues
包含旧值(与更新前相同)。
<asp:DetailsView ID="CustomerDetailsView" runat="server"
DefaultMode="Edit"
AutoGenerateRows="false"
OnItemUpdating="CustomerDetailsView_ItemUpdating"
>
<Fields>
<asp:BoundField DataField="LastName" HeaderText="Last name" ReadOnly="True" />
<asp:BoundField DataField="FirstName" HeaderText="First name" ReadOnly="True" />
<%-- Other fields ... --%>
<asp:CommandField ShowEditButton="true" />
</Fields>
</asp:DetailsView>
后面的代码:
private Customer customer;
protected void Page_Load(object sender, EventArgs e)
{
using (var context = new CustomersContext())
{
customer = context.Logins.First();
}
CustomerDetailsView.DataSource = new List<Customer>() { customer };
CustomerDetailsView.DataBind();
}
protected void CustomerDetailsView_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
// e.OldValues.Count == 0
// e.NewValues["FirstName"] - is same as taken from database
}
看到这个答案:OldValues collection in event "ItemUpdating" of DetailsView is always empty
这似乎只有在您使用绑定到数据源控件的 DataSourceID 属性 时才有效。
愚蠢的我,每次重新加载页面时我都在设置新的数据源,即使它是 post-back。
应该是:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
using (var context = new CustomersContext())
{
customer = context.Logins.First();
}
CustomerDetailsView.DataSource = new List<Customer>() { customer };
CustomerDetailsView.DataBind();
}
}
看不到旧值,但新值看起来是正确的。
我将 DetailsView 绑定到一个对象。当调用 ItemUpdating
时(当我点击更新时)OldValues
为空并且 NewValues
包含旧值(与更新前相同)。
<asp:DetailsView ID="CustomerDetailsView" runat="server"
DefaultMode="Edit"
AutoGenerateRows="false"
OnItemUpdating="CustomerDetailsView_ItemUpdating"
>
<Fields>
<asp:BoundField DataField="LastName" HeaderText="Last name" ReadOnly="True" />
<asp:BoundField DataField="FirstName" HeaderText="First name" ReadOnly="True" />
<%-- Other fields ... --%>
<asp:CommandField ShowEditButton="true" />
</Fields>
</asp:DetailsView>
后面的代码:
private Customer customer;
protected void Page_Load(object sender, EventArgs e)
{
using (var context = new CustomersContext())
{
customer = context.Logins.First();
}
CustomerDetailsView.DataSource = new List<Customer>() { customer };
CustomerDetailsView.DataBind();
}
protected void CustomerDetailsView_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
// e.OldValues.Count == 0
// e.NewValues["FirstName"] - is same as taken from database
}
看到这个答案:OldValues collection in event "ItemUpdating" of DetailsView is always empty
这似乎只有在您使用绑定到数据源控件的 DataSourceID 属性 时才有效。
愚蠢的我,每次重新加载页面时我都在设置新的数据源,即使它是 post-back。
应该是:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
using (var context = new CustomersContext())
{
customer = context.Logins.First();
}
CustomerDetailsView.DataSource = new List<Customer>() { customer };
CustomerDetailsView.DataBind();
}
}
看不到旧值,但新值看起来是正确的。