私は WebForms .NET 4.5 と asp:ListView とモデル バインディングを使用しています。その中で私は以下を使用しています:
<EditItemTemplate>
<InsertItemTemplate>
コントロールの外観を定義します。ただし、99% の場合、これらのレイアウトは同一です。INSERT と EDIT の両方に 1 つを使用する方法はありますか? または、HTML を一度定義してどちらかで使用できる別のアプローチはありますか?
私は使用していません<asp:DynamicControl>
が、通常<asp:texbox>
などなので、.NET 4.5 WebForms は信じていません: FormView で 3 つのテンプレートすべてを (まだ) 指定する必要がありますか? 適用されます。
私はすでにユーザーコントロールを試しました。また、コンテンツが含まれている間、挿入/編集中のオブジェクトに新しい値が適用されないという点で、モデル バインディングが壊れています。
ソリューションの更新:
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;
}
}
ここでは、INSERT にも EDIT テンプレートを使用しています。