gpt4 book ai didi

c# - ListView DeleteMethod 未传递 DataKeyNames 值

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:12 25 4
gpt4 key购买 nike

我有一个 ListView :

<asp:ListView ID="ListView1" runat="server" DataKeyNames="NoteId" DeleteMethod="ListView1_DeleteItem" ItemType="NotesPractice.Note" SelectMethod="ListView1_GetData"
<ItemTemplate>
...
<asp:Button ID="btnDelete" CausesValidation="false" CommandName="Delete" runat="server" Text="Delete" />
...
</ItemTemplate>
</asp:ListView>

DeleteMethod ListView1_DeleteItem:

public void ListView1_DeleteItem(int id)
{
System.Diagnostics.Debug.WriteLine("The id of button is: " + id);
using (var db = new NotesContext())
{
var note = (from n in db.Notes
where n.NoteId == id
select n).Single();
db.Notes.Remove(note);
db.SaveChanges();
}

如果我查看浏览器控制台,我会看到这个异常上升:

Uncaught Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: A null value for parameter 'id' of non-nullable type 'System.Int32' for method 'Void ListView1_DeleteItem(Int32)' in 'NotesPractice._Default'. An optional parameter must be a reference type or a nullable type.

这表明 NoteId 值(在 DataKeyNames 中指定)未到达 delete 方法,因此它抛出异常。为什么没有任何数据到达该方法?

我也尝试过明确指定 DataKeyNames,但没有成功:

DataKeyNames="NotesPractice.Note.NoteId"

这是我的数据库的副本:

enter image description here

最佳答案

像这样更改您的删除方法:-

public void ListView1_DeleteItem(int NoteId)

根据设计,模型绑定(bind)功能需要这样做。

The id parameter name should match the DataKeyNames value set on the control

检查 Dan Wahlin's博客了解更多详情。

关于c# - ListView DeleteMethod 未传递 DataKeyNames 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33036043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com