我有一个列表视图:
<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();
}
如果我查看浏览器控制台,我会看到此异常上升:
未捕获的Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException:null的值 方法'Void'的非可空类型'System.Int32'的参数'id' “NotesPractice._Default”中的ListView1_DeleteItem(Int32)'。可选的 参数必须是引用类型或可空类型。
这表明NoteId
值(在DataKeyNames中指定)未到达delete方法,因此它抛出了异常。为什么没有任何数据到达方法?
我也尝试过显式指定DataKeyNames而没有运气:
DataKeyNames="NotesPractice.Note.NoteId"
以下是我的数据库的副本:
答案 0 :(得分:2)
更改您的删除方法,如下所示: -
public void ListView1_DeleteItem(int NoteId)
模型绑定功能需要根据设计进行此操作。
id参数名称应与设置的DataKeyNames值匹配 控制
查看Dan Wahlin's博客了解详情。