我有一个自定义用户控件,其中包含有关我以编程方式添加到页面的人的信息。为简单起见,我们可以说我的用户控件只保存一个人的名字和姓氏。
<table>
<tr>
<td>
<asp:Label ID="lblFirstName" runat="server">First Name</asp:Label>
</td>
<td>
<asp:TextBox ID="txtFirstName" runat="server" />
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblLastName" runat="server">Last Name</asp:Label>
</td>
<td>
<asp:TextBox ID="txtLastName" runat="server" />
</td>
</tr>
</table>
我需要允许用户添加参加活动的人,他们需要能够添加尽可能多的人。我有一个&#39;添加人物&#39;屏幕上的按钮,因此当用户选择该按钮时,会向页面添加一个空白用户控件以供他们填写。在后面的代码中,我会跟踪有多少人参加,以便我可以使用此列表在回发时呈现用户控件。
public List<Person> AttendingPeople
{
get { return ViewState["AttendingPeople"] == null ? new List<Person>() : ViewState["AttendingPeople"] as List<Person>; }
set { ViewState["AttendingPeople"] = value; }
}
在为所有参加者填写信息后,用户需要保存信息。当他们选择保存时,我需要验证所有文本框都已填写完毕。我更喜欢用javascript来做这件事,但是,我不知道如何找到信息,因为我无法确定页面上加载了多少用户控件。到目前为止,这就是我所拥有的。
function ValidateSave() {
if ('<%= this.AttendingPeople.Count %>' == 0) {
alert('Need to fill out at least one person whose attending.');
}
else {
//Where user controls are added.
var children = document.getElementById('<%= divAttending.ClientID %>').children;
for (var i = 0; i < children.length; i++) {
//Find table inside user control that holds data
if (children[i].tagName == 'TABLE') {
var table = children[i];
var rows = table.rows;
for (var r = 0; r < rows.length; r++) {
var row = rows[r];
//Not sure how to extract data from each row
}
}
}
}
}
我的第一个问题是'<%= this.AttendingPeople.Count %>'
总是返回列表中的初始计数。在Page_Load中,如果我将3个人添加到列表中,则计数将始终为3.如果我不添加任何内容,则无论我随着时间的推移添加多少人,计数将始终为0。
其次,我严重怀疑我是否会以正确的方式找到所有数据。我将不胜感激任何建议或批评。我对ASP.NET知之甚少,所以我知道我有很多需要学习的东西。提前谢谢。
答案 0 :(得分:0)
<%= this.AttendingPeople.Count %>
此代码仅在呈现视图后打印参加人员的初始计数。您可以在页面来源中查看该内容。
要获得参加人数的实际计数,您可以存储初始值,并在每次添加或删除某人时增加或减少该值。这样的事情:
var apcount = '<%= this.AttendingPeople.Count %>';
/* do it when you add a person */
apcount++;