如何在没有添加表单runat服务器的情况下在Mvc中使用gridView?

lok*_*oki 0 c# asp.net-mvc asp.net-mvc-3

我的问题太简单但令人费解.我有一个开发mvc页面来学习.我使用了Repeater服务器控件.


<asp:Repeater ID="ProductList" runat="server">
<ItemTemplate>
<li>
<%#Eval("Name") %>
</li>
</ItemTemplate>

Run Code Online (Sandbox Code Playgroud)

还:(查看)

public partial class ListProduct : ViewPage
{
   protected void Page_Load(object sender, EventArgs e)
   {

                ProductList.DataSource = ViewData["Products"];
                ProductList.DataBind();
   }
}
Run Code Online (Sandbox Code Playgroud)

我的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>

Run Code Online (Sandbox Code Playgroud)

视图:



            GridView1.DataSource = ViewData["Products"];
            GridView1.DataBind();
Run Code Online (Sandbox Code Playgroud)

错误**:控件'GridView'类型的'ContentPlaceHolder2_GridView1'必须放在带有runat = server的表单标签内.**

我通过添加表单runat服务器来理解并解决了问题.但我不明白原因?Repeater和GridView是服务器控件.仅在转发器使用中没有错误转发器.GRidView返回错误.为什么?

Dar*_*rov 6

你在做什么?ASP.NET MVC应用程序中的服务器端控件?请不要.停止这种疯狂.

没有.

Repeater可能会工作,因为它不依赖于ViewState而是GridView - >忘掉它.还忘了Repeater.还要忘记runat="server"ASP.NET MVC应用程序中的任何内容(如果您使用的是WebForms视图引擎,则除了内容占位符).

在ASP.NET MVC中,您可以使用WebGrid帮助程序来呈现网格.您可以使用编辑器或显示模板替换Repeater.

如果你需要使用GridViews和类似的东西,那么做ASP.NET MVC真的没有意义.为此,请使用经典的WebForm.