webforms – ASP.NET Web窗体(4.5)强类型模型绑定 – ListView的
注意:这是.NET 4.5和NOT MVC中的ASP.NET Web窗体模型绑定.
我正在使用ASP.NET Web窗体(4.5)的新的强类型模型绑定功能来生成可以编辑的项目列表.这适用于查看初始列表,编辑项目和删除项目.但是我在插入新项目时遇到了问题. 具体来说,在我的EditItemTemplate和InsertItemTemplate中,我有一个DropDownList(实际上,它是一个从DropDownList派生的自定义控件,但出于这个问题的目的,它是一个DropDownList).控件在标记内定义如下…… <agp:ClientStatusDropDownList ID="ClientStatusID" runat="server" SelectedValue="<%#: BindItem.ClientStatusID %>" /> 在EditItemTemplate中,这很好但是在InsertItemTemplate中,这会在运行页面时生成错误:数据绑定方法(如Eval(),XPath()和Bind()只能在数据绑定控件的上下文中使用. 因此,我删除了SelectedValue =“<%#:BindItem.ClientStatusID%>”部分.从InsertItemTemplate再次尝试.这次没有错误消息,但是当调用ListView.InsertMethod时,模型上的ClientStatusID属性未设置为DropDownList的值(而其他属性设置正确). ListView.InsertMethod: public void ListView_InsertMethod(int ID) { Model model = this.DbContext.Models.Create(); if (this.TryUpdateModel(model)) { this.DbContext.SaveChanges(); this.ListView.DataBind(); } } Model类: public class Model{ public Int32 ID { get; set; } public String Description { get; set; } public Boolean IsScheduleFollowUp { get; set; } public Nullable<Int32> ClientStatusID { get; set; } } EditItemTemplate: <EditItemTemplate> <tr> <td> <asp:TextBox ID="Description" runat="server" Text="<%#: BindItem.Description %>" /> </td> <td> <asp:CheckBox ID="IsScheduleFollowUp" runat="server" Checked="<%# BindItem.IsScheduleFollowUp %>" /> </td> <td> <agp:ClientStatusDropDownList ID="ClientStatusID" runat="server" SelectedValue="<%#: BindItem.ClientStatusID %>" /> </td> <td> <asp:Button ID="Update" runat="server" ClientIDMode="Static" CommandName="Update" Text="Update" /> <asp:Button ID="Cancel" runat="server" ClientIDMode="Static" CommandName="Cancel" Text="Cancel" /> </td> </tr> </EditItemTemplate> InsertItemTemplate: <InsertItemTemplate> <tr> <td> <asp:TextBox ID="Description" runat="server" Text="<%#: BindItem.Description %>" /> </td> <td> <asp:CheckBox ID="IsScheduleFollowUp" runat="server" Checked="<%# BindItem.IsScheduleFollowUp %>" /> </td> <td> <agp:ClientStatusDropDownList ID="ClientStatusID" runat="server" /> </td> <td> <asp:Button ID="Insert" runat="server" ClientIDMode="Static" CommandName="Insert" Text="Add" /> </td> </tr> </InsertItemTemplate> 我原本以为是控件的ID用于确定模型上将传递给值的属性(即TextBox被称为“描述”的位置,该值将被传递给“描述”该模型的财产).显然情况并非如此,而是由“<%#BindItem.Description%>”控制,但是从这个问题的其余部分可以看出,我无法在“InsertItemTemplate”中使用此语法.我无法相信在这种情况下不支持DropDownList,但我找不到使用Google或Bing的4.5模型绑定使用DropDownList的任何示例(实际上,ASP中新模型绑定的例子很少. NET 4.5使用除了几个TextBox控件之外的任何东西). 任何人都可以进一步阐明这个问题(最好告诉我需要做些什么)? 关于我的其他问题我已经看过…… > Binding a DropDownList in ListView InsertItemTemplate throwing an error 所有这些都使用较旧的样式绑定方法,而不是4.5中的新方法 谢谢. 解决方法
我一直在做类似的事情,并且能够得到一个样本,所以我想我会发布我所拥有的,看看这对你有帮助.
这是我的页面代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="listview-databind.aspx.cs" Inherits="test_listview_databind" Debug="true" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:ListView ID="lv" runat="server" ItemType="DataModel" DataKeyNames="Id" SelectMethod="lv_GetData" InsertItemPosition="FirstItem" InsertMethod="lv_InsertItem" UpdateMethod="lv_UpdateItem"> <LayoutTemplate> <table> <tr id="itemPlaceholder" runat="server"></tr> </table> </LayoutTemplate> <ItemTemplate> <tr> <td> <asp:Literal ID="Description" runat="server" Text="<%# Item.Description %>" /> </td> <td> <asp:CheckBox ID="IsScheduleFollowUp" runat="server" Checked="<%# Item.IsScheduleFollowUp %>" /> </td> <td> <asp:Literal ID="ClientStatusId" runat="server" /> </td> <td> <asp:Button ID="Edit" runat="server" ClientIDMode="Static" CommandName="Edit" Text="Edit" /> </td> </tr> </ItemTemplate> <InsertItemTemplate> <tr> <td> <asp:TextBox ID="Description" runat="server" Text="<%# BindItem.Description %>" /> </td> <td> <asp:CheckBox ID="IsScheduleFollowUp" runat="server" Checked="<%# BindItem.IsScheduleFollowUp %>" /> </td> <td> <asp:DropDownList ID="ClientStatusId" runat="server" SelectedValue="<%# BindItem.ClientStatusId %>"> <asp:ListItem>1</asp:ListItem> <asp:ListItem>2</asp:ListItem> </asp:DropDownList> </td> <td> <asp:Button ID="Insert" runat="server" ClientIDMode="Static" CommandName="Insert" Text="Add" /> <asp:Button ID="Cancel" runat="server" ClientIDMode="Static" CommandName="Cancel" Text="Cancel" /> </td> </tr> </InsertItemTemplate> <EditItemTemplate> <tr> <td> <asp:TextBox ID="Description" runat="server" Text="<%# BindItem.Description %>" /> </td> <td> <asp:CheckBox ID="IsScheduleFollowUp" runat="server" Checked="<%# BindItem.IsScheduleFollowUp %>" /> </td> <td> <asp:DropDownList ID="ClientStatusId" runat="server" SelectedValue="<%# BindItem.ClientStatusId %>"> <asp:ListItem>1</asp:ListItem> <asp:ListItem>2</asp:ListItem> </asp:DropDownList> </td> <td> <asp:Button ID="Update" runat="server" ClientIDMode="Static" CommandName="Update" Text="Update" /> <asp:Button ID="Cancel" runat="server" ClientIDMode="Static" CommandName="Cancel" Text="Cancel" /> </td> </tr> </EditItemTemplate> </asp:ListView> </form> </body> </html> 而我的代码背后: using System.Collections.Generic; using System.Linq; public partial class test_listview_databind : System.Web.UI.Page { public IQueryable<DataModel> lv_GetData() { var l = new List<DataModel>(); l.Add(new DataModel() { Id = 1,Description = "Test 1",IsScheduleFollowUp = true,ClientStatusId = 1 }); l.Add(new DataModel() { Id = 2,Description = "Test 2",IsScheduleFollowUp = false,ClientStatusId = 2 }); return l.AsQueryable(); } public void lv_InsertItem() { var item = new DataModel(); TryUpdateModel(item); if (ModelState.IsValid) { Response.Write(item.ClientStatusId); } } } 你没有发布你的整个ListView示例,所以我猜测你如何设置它.请告诉我这是否有用以及是否/如何对您有用,因为您的代码看起来可行并且我很好奇导致您的问题的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 为什么MvcApplication.RegisterRoutes被定义
- asp.net – 如何使用MVC 4和View Models(强类型)渲染一组复
- asp.net-mvc – ASP MVC – 有默认内容类型的任何常量?
- asp.net-mvc – 在实体框架中使用存储过程
- asp.net-mvc – 处理程序“dotless”在其模块列表中有一个错
- asp.net-mvc-3 – 如果没有定义,Razor RenderSection抛出错
- asp.net-mvc – ASP.NET MVC:三态复选框
- asp.net-mvc – 如何将应用程序用户放在与其余对象相同的上
- asp.net – 用于SITE的IIS配置编辑器部分中缺少httpCompres
- 经典ASP和ASP.NET集成
- ASP.net – 按钮 – Javascript确认对话框 – 执
- asp.net-mvc – 在ASP.NET MVC 3中使用WebGrid显
- 如果会话正在使用,单个asp.net用户可以一次使用多
- asp.net – 如何将查询字符串添加到facebook登录
- asp.net-mvc – MVC和NOSQL:直接将视图模型保存
- ASP.NET Bundling – 忽略第二个JS文件
- asp.net – SignalR 2在Azure上失败
- asp.net-mvc – MVC4将复杂对象从View传递到Cont
- asp.net – 在.NET中以编程方式添加HttpHandler的
- ASP.NET服务与存储库层