我正在使用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?适用。
我已经尝试过用户控件了。当内容被包含在内时,模型绑定被打破,因为没有新值被应用于被插入/编辑的对象。
解决方案更新:
声明没有INSERT TEMPLATE的表单视图:
<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;
}
}
并且您正在使用INSIT的EDIT模板。
答案 0 :(得分:3)
您最好的选择是为自己开发自定义ListView
。
使用一个模板init
ListView
将其中一个用于另一个模板。在任何模式下,您可能还需要自定义save
按钮以切换CommandName
。
这里提到的代码将引导你朝着这个方向发展。
https://stackoverflow.com/a/2202850/1355315
我认为你的问题和这个帖子一样。
答案 1 :(得分:0)
也许您应该将此常见布局作为单独的控件提取。我在ASP.Net MVC中这样做。