我的问题太简单但令人费解。我有一个开发mvc页面来学习。我使用了Repeater服务器控件。
<asp:Repeater ID="ProductList" runat="server">
<ItemTemplate>
<li>
<%#Eval("Name") %>
</li>
</ItemTemplate>
还:(查看)
public partial class ListProduct : ViewPage
{
protected void Page_Load(object sender, EventArgs e)
{
ProductList.DataSource = ViewData["Products"];
ProductList.DataBind();
}
}
我的Repeater Server控件运行良好。但我添加了一个GridView控件。错误返回我:
<asp:Content ID="Content4" ContentPlaceHolderID="ContentPlaceHolder2" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="id" HeaderText="" Visible="false" />
<asp:BoundField DataField="Name" HeaderText="" Visible="true" />
</Columns>
</asp:GridView>
<asp:Repeater ID="ProductList" runat="server">
<ItemTemplate>
<li>
<%#Eval("Name") %>
</li>
</ItemTemplate>
</asp:Repeater>
</asp:Content>
查看:
GridView1.DataSource = ViewData["Products"];
GridView1.DataBind();
错误**:'GridView'类型的控件'ContentPlaceHolder2_GridView1'必须放在带有runat = server的表单标签内。**
我通过添加表单runat服务器来理解并解决了问题。但我不明白原因? Repeater和GridView是服务器控件。仅在转发器使用中没有错误转发器。 GRidView返回错误。为什么呢?
答案 0 :(得分:6)
否。
Repeater可能工作,因为它不依赖于ViewState而是GridView - &gt;把它给忘了。还忘了Repeater。还要忘记ASP.NET MVC应用程序中有runat="server"
的任何内容(如果使用WebForms视图引擎,则为内容占位符除外)。
在ASP.NET MVC中,您可以使用WebGrid
帮助器来呈现网格。您可以使用编辑器或显示模板替换Repeater。
如果你需要使用GridViews和类似的东西,那么做ASP.NET MVC真的没有意义。为此目的使用经典的WebForm。