问题描述
||
在我正在创建的这个项目中,我正在创建一个页面的模型,该页面使用似乎适合我需求的DetailView(我在博客中看到的东西)。但是,我不想将数据绑定到任何东西。
因此,我添加了控件,然后开始向其中添加适当的模型列,并尝试在测试页上呈现该控件。 ASP.NET应该生成HTML的地方不存在。
这是我的代码(有一个\'real \'DetailsView控件,然后是一个按钮,然后是一个空白的测试Details视图控件):
<asp:DetailsView ID=\"DetailsView1\" runat=\"server\"
Height=\"184px\" Width=\"271px\" EmptyDataText=\"no data\"
style=\"margin-right: 1px\">
<EmptyDataTemplate>
There is no data.
</EmptyDataTemplate>
<FooterTemplate>
Passenger Details
</FooterTemplate>
<Fields>
<asp:TemplateField HeaderText=\"Name\" SortExpression=\"Name\">
<EditItemTemplate>
<asp:TextBox ID=\"TextBox1\" runat=\"server\" Text=\'<%# Bind(\"PassengerName\") %>\'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID=\"TextBox1\" runat=\"server\" Text=\'<%# Bind(\"PassengerName\") %>\'></asp:TextBox>
<asp:requiredFieldValidator ID=\"requiredFieldValidator1\" runat=\"server\"
ErrorMessage=\"this field must be filled in \" ControlTovalidate=\"TextBox1\"></asp:requiredFieldValidator>
<br />
<br />
<br />
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID=\"Label1\" runat=\"server\" Text=\'<%# Bind(\"PassengerName\") %>\'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText=\"Address\">
<EditItemTemplate>
<asp:TextBox ID=\"TextBox2\" runat=\"server\"></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID=\"TextBox2\" runat=\"server\"></asp:TextBox>
<asp:requiredFieldValidator ID=\"requiredFieldValidator2\" runat=\"server\"
ErrorMessage=\"this field must be filled in \" ControlTovalidate=\"TextBox2\"></asp:requiredFieldValidator>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID=\"Label2\" runat=\"server\"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText=\"Phone\">
<EditItemTemplate>
<asp:TextBox ID=\"TextBox3\" runat=\"server\"></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID=\"TextBox3\" runat=\"server\"></asp:TextBox>
<asp:requiredFieldValidator ID=\"requiredFieldValidator3\" runat=\"server\"
ControlTovalidate=\"TextBox3\" ErrorMessage=\"this field must be filled in \"></asp:requiredFieldValidator>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID=\"Label3\" runat=\"server\"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText=\"Frequent Flyer Number\">
<EditItemTemplate>
<asp:TextBox ID=\"TextBox4\" runat=\"server\"></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID=\"TextBox4\" runat=\"server\"></asp:TextBox>
<asp:requiredFieldValidator ID=\"requiredFieldValidator4\" runat=\"server\"
ControlTovalidate=\"TextBox4\" ErrorMessage=\"this field must be filled in \"></asp:requiredFieldValidator>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID=\"Label4\" runat=\"server\"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText=\"Hello,World.\" />
</Fields>
<HeaderTemplate>
Passenger Details
</HeaderTemplate>
</asp:DetailsView>
<asp:Button ID=\"btnPay\" runat=\"server\" Text=\"Payment page\" />
<br />
<asp:DetailsView ID=\"DetailsView2\" runat=\"server\"
Height=\"184px\" Width=\"271px\" EmptyDataText=\"no data\"
style=\"margin-right: 1px\">
<EmptyDataTemplate>
There is no data.
</EmptyDataTemplate>
<FooterTemplate>
Passenger Details
</FooterTemplate>
<HeaderTemplate>
Passenger Details
</HeaderTemplate>
</asp:DetailsView>
这是生成的内容:
<div>
</div>
<div>
</div>
<input type=\"submit\" name=\"btnPay\" value=\"Payment page\" id=\"btnPay\" />
<br />
<div>
</div>
<br />
有人有什么想法吗?在这种环境下,我们也使用Visual Studio 2008。
解决方法
您的目标似乎是欺骗asp:DetailsView以显示其自身及其字段,即使您无意将其绑定到数据。
可以做到的!
DataTable = New DataTable
DataTable.Rows.Add()
Me.dtlMyDetailView.DataSource = DataTable
Me.dtlMyDetailView.DataBind()
此外,如果设置了CommandName,ButtonFields将生成ItemCommand事件。
您可以使用IsPostBack或其他逻辑来确保当您不想丢失视图状态时不使用DataBind。如果要响应ItemCommand事件并在详细信息视图中使用任何控件的值,则需要使用viewstate。 DataBind将其吹走。
, 必须显示控件的\“ DataBind \”方法才能显示任何内容。以下aspx单独显示
<asp:DetailsView ID=\"dtsView\" runat=\"server\">
<EmptyDataTemplate>
THIS IS EMPTY
</EmptyDataTemplate>
</asp:DetailsView>
但是如果他通过c#端添加以下代码
protected void Page_Load(object sender,EventArgs e)
{
dtsView.DataSource = new DataTable();
dtsView.DataBind();
}
生成以下内容
<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"dtsView\" style=\"border-collapse:collapse;\">
<tbody><tr>
<td>
THIS IS EMPTY
</td>
</tr>
</tbody></table>