【发布时间】:2013-11-13 22:47:33
【问题描述】:
我正在使用 WebForms .NET 4.5 和 asp:ListView 和模型绑定。其中我使用的是:
<EditItemTemplate>
<InsertItemTemplate>
定义控件的外观。然而,99% 的时间这些布局是相同的。有没有一种方法可以同时用于 INSERT 和 EDIT?还是有另一种方法可以让我定义一次 HTML 并在其中使用它?
我没有使用<asp:DynamicControl>,而是正常使用<asp:texbox>等,所以我不相信.NET 4.5 WebForms: do I (still) really have to specify all 3 templates in a FormView?适用。
我已经尝试过用户控件。虽然内容被包含在内,但模型绑定被破坏,因为没有新值应用于正在插入/编辑的对象。
解决方案更新:
声明没有插入模板的表单视图:
<asp:FormView ID="fvData" runat="server"
ItemType="DataLayer.Models.Country"
DataKeyNames="Id"
InsertMethod="InsertRecord"
SelectMethod="BindData"
UpdateMethod="UpdateRecord"
OnDataBound="fvData_DataBound">
<EditItemTemplate>
<b>EDIT</b>
<div class="row">
<div class="form-group">
<label class="col-md-4 control-label" for="txtCountryName">Name</label>
<div class="col-md-8">
<asp:TextBox runat="server" ID="txtCountryName" name="txtCountryName" placeholder="My Country" CssClass="form-control" Text='<%#: BindItem.Name %>'></asp:TextBox>
<dav:DataAnnotationsValidator CssClass="label label-danger" ID="davSchoolName" runat="server" ValidationGroup="Default" MetadataSourceID="msCountryInformation" ControlToValidate="txtCountryName" ObjectProperty="Name" Display="Dynamic" />
</div>
</div>
</div>
</EditItemTemplate>
</asp:FormView>
然后:
protected void Page_Init()
{
if (!IsPostBack)
{
fvData.InsertItemTemplate = fvData.EditItemTemplate;
}
}
您也在使用 EDIT 模板进行 INSERT。
【问题讨论】:
-
如果您使用
<%# Bind("Path") %>而不是<%# BindItem.Path %>,用户控件会起作用吗? -
@RichardDeeming 这是否意味着模型绑定将不再起作用,因为模型绑定需要使用 BindItem?
-
我不这么认为。 AFAIK,任何一种语法都应该适用于模型绑定。
-
@RichardDeeming 尝试了 Bind() 语法并表现出与 BindItem 相同的行为,即。它显示数据,但不会将其更新回模型和数据库。
标签: c# model-binding asp.net-4.5