我在C#/ ASP中有一组屏幕,用户输入信息。它分为多个部分,使其更加用户友好。它曾经是在单独的页面中,但这很难管理,因为所有信息都非常相关。所以它被改为在我们根据用户的进度显示和隐藏的一个页面中的面板。
我们希望能够很容易地移动东西。目前我们必须进行大量的复制粘贴,这不是特别快,而且容易出错。是否有更好的方法来处理多部分表单,使其更加模块化?
(作为背景,我主要是Java开发人员,最近一直在使用.NET)
答案 0 :(得分:3)
.ascx
文件,也称为UserControl
,是在整个项目中重复使用常见html /代码的好方法。它们基本上只是其他.NET控件的容器。
所以,让我们假装你有一个非常简单的形式,你只是要求一个人的姓名和年龄,并且由于某种原因你想在页面或多个页面上多次使用它......
标记:
<asp:Label runat="server" id="lblName" Text="What is the person's name?" AssociatedControlID="txtName"></asp:Label>
<asp:TextBox runat="server" id="txtName"></asp:TextBox>
<asp:Label runat="server" id="lblAge" Text="What is the person's age?" AssociatedControlID="txtAge"></asp:Label>
<asp:TextBox runat="server" id="txtAge"></asp:TextBox>
<asp:Button runat="server" id="btnSubmit" Text="Submit" Onclick="btnSubmit_Click"></asp:Button>
代码背后的代码:
private Person _Person;
protected void btnSubmit_Clicked(object sender, EventArgs args)
{
_Person = new Person() { Name = txtName.Text, Age = txtAge.Text };
}
public Person GetPerson()
{
return _Person;
}
然后在其他页面上,您只需删除此用户控件,您可以像这样引用它:
标记:
<%@ Register src="UserControl1.ascx" tagname="UserControl1" tagprefix="uc1" %>
<html>
...blah blah...
<p>Tell us about you</p>
<uc1:UserControl1 ID="ucYou" runat="server" />
<p>Tell us about your friend</p>
<uc1:UserControl1 ID="ucYourFriend" runat="server" />
.. blah blah
</html>
代码背后的代码:
protected void SomeMethodThatSavesPage()
{
// other stuff
Person you = ucYou.GetPerson();
Person yourFriend = ucYourFriend.GetPerson();
}
正如Robert在评论中提醒我的那样,您需要确保使用UserControl的页面顶部有正确的页面指令。如果您处于设计视图中并且只是将UserControl拖到页面上,Visual Studio将为您处理此问题。否则,您需要自己包含它。
答案 1 :(得分:0)
您可能想要查看向导控件 - 它旨在处理这种情况。