私があなたを正しく理解していると仮定すると、UserControlを使用する必要があるように聞こえます。
基本的に、UserControl.ascxファイルを作成します(VSはUserControl.designer.csと分離コードクラスを生成します)。次に、次のように、特別な属性を指定せずに入力フィールドをそこに配置します。
(私はWebControlsよりもHtmlControlsを好むことに注意してください。それらはよりクリーンなマークアップを提供し、物事を混乱させません。試してみることをお勧めします):
<%@ Control blargh %>
<label for="<%= Street.ClientID %>">Street address</label>
<input type="text" runat="server" id="Street" /> <br />
<label for="<%= City.ClientID %>">Town / City</label>
<input type="text" runat="server" id="City" /> <br />
<!-- etc -->
id=""
入力コントロールの属性をいじっていないことに注意してください。次に、web.configに登録します。
<add tagPrefix="foo" tagName="Address" src="~/Controls/Address.ascx" />
次に、アドレスフォームが必要な各ページで(UserControlがAddressControlと呼ばれると仮定)
<%@ Page blargh %>
<p>Enter your address details below:</p>
<foo:Address runat="server" id="Address" />
次に、ページのコードビハインドでこれを行うことができます。
public override void OnLoad(Object sender, EventArgs e) {
if( Page.IsPostBack ) {
Validate();
if( Page.IsValid ) {
// get values from a POST
String street = this.Address.Street.Value;
String city = this.Address.City.Value;
// and so on
}
} else {
// set values if you're retrieving data from a DB or something
this.Address.Street.Value = "123 Fake Street";
this.Address.City.Value = "Frying Pan City";
}
}
"<%= Street.ClientID%>"-thingをどのように使用したかに注意してください。ASP.NETは、コントロールの親名に基づいて(以下同様に再帰的に)コントロール名とIDを自動的に生成します。したがって、実際のHTML入力は次のようにレンダリングされます。
<label for="Address.Street">Street address</label>
<input type="text" name="Address_Street" id="Address.Street" />
この設計と実践はWebFormsにのみ適用されることに注意してください。ASP.NETMVCはまた完全に異なります。