我正在使用asp.net webforms中的Todolist。
我让列表中的项目一个接一个地呈现:
<asp:Panel ID="todoItem" runat="server" DefaultButton="updateItem" CssClass="tdLstItemWrapper">
<div class="tdLstItemInfo">
<p class="itemHeader">Clean</p>
<p class="itemDesc">Clean kitchen</p>
</div>
<div class="tdLstItemForm edit">
<asp:HiddenField ID="todoItemID" runat="server" Value="37"/>
<asp:TextBox ID="empSign" runat="server"></asp:TextBox>
<asp:Button ID="updateItem" runat="server" Text="OK" OnClick="updateItem_Click" />
</div>
</div>
让我说我的更新功能就像这样简单:
protected void updateItem_Click(object sender, EventArgs e)
{
Response.Write(todoItemID.Value + " - " + empSign.Text)
}
这里的第一个问题当然是我的面板,hiddelfield,文本框和不同项目按钮的ID不能相同。我可以为每个控件添加一个ID,如下所示:
<asp:HiddenField ID="todoItemID37" runat="server" Value="37"/>
但如果我这样做那么我将如何能够为所有项目使用相同的功能?
我希望能够在ASP Classic中做一些你可以在网页上有多个表单的地方,其中每个表单都可以有一个带有名称的字段,当发布时你可以在一个函数中请求一个。 / p>
这样的事情:
form.html:
<form action="save.asp" method="post">
<input type="text" name="username">
</form>
save.asp
<%
Response.Write(Request.Form("username"))
%>
在asp.net中我可以使用Request.Form.GetValues("username")
来实现这样的目标,如果我而不是使用<asp:>
使用html版本<input>
。但在这种情况下,它将为我提供一个包含名称username的所有文件的数组,该名称包含在我的webforms <form>
标记中,而不仅仅是ASP Classic中返回的那个文件,因为它是唯一包含在其中的文件表单,即使它可能是该页面上另一种形式的字段名为username。因此,对于我的隐藏字段,其中每个字段都有值,这不起作用,在另一个字段上,我可以执行类似这样的操作来获取empSign,因为此时只有一个项目将被更新,并且只有一个empSign字段将签署:
string empSignValue = Request.Form.GetValues("empSign").Where(value => value != "").ToArray().First().ToString();
修改
我没有使用<asp:ListView>
的原因是我真的不知道如何解决它。澄清页面布局是这样的:
我有三个清单:
List<todoList> tdLst = todoUtils.getLists(todoListID);
List<todoItem> tdItemLst = todoUtils.getItems(Convert.ToInt32(todoListID);
List<todoCat> tdCatLst = todoUtils.getCats(todoListID);
项目可以是root(todoCatID = 0)或属于某个类别。每个列表可以有多个类别。我在我的tdCatLst上做了一个foreach来通过类别并挑选我使用的每个类别的项目:
var tdItems = tdItemLst.Where(item => item.todoCatID == todoCatID).ToList();
但是我如何通过listview实现这一目标?如果制作一个listview并将tdLst列表绑定到它并循环我的根项目,我需要一个listview用于我的类别和listview中的listview我的项目?或者我该怎么做呢?
我有点卡在这里。非常感谢任何帮助。