【问题标题】:Alternative to using the OnLoad event in an ASP.Net MVC View?在 ASP.Net MVC 视图中使用 OnLoad 事件的替代方法?
【发布时间】:2010-10-08 16:33:28
【问题描述】:

我正在创建一个简单的测试应用程序,以便了解 ASP.Net MVC 如何在我们日常处理的工作中发挥作用。我们使用来自 Developer's Express 的第 3 方控件,并且我们将继续使用它们。如果它们在 ASP.Net MVC 中绝对不起作用,那么我们将不会使用 ASP.Net MVC。

话虽如此,有人已经找到了一种让它发挥作用的方法。他只需要在后面的代码中放一些代码。他必须重写 OnLoad 事件,只需简单地放置 grid.DataSource = model 和 grid.DataBind() 即可按预期工作。

在 ASP.Net MVC RC 中,删除了文件隐藏代码。我知道我可以把它们放回去……但是,既然人们通常说文件后面的代码是邪恶的,那你还能怎么做呢?

【问题讨论】:

    标签: .net asp.net asp.net-mvc code-behind


    【解决方案1】:

    我(似乎记得我)见过类似于直接在 View (.aspx) 中做的事情:

    <%
       grid.DataSource = Model;
       grid.DataBind();
    %>
    

    为 Telerik 控件工作,提议的解决方案闻起来很像这样,所以也许这对你有用?

    【讨论】:

    • 我试过这个,但它不起作用......我可以单步执行它,看到模型中确实有数据并且网格设置正确,它只是说有没有可显示的数据。
    【解决方案2】:

    任何使用ViewState 的控件在ASP.NET MVC 中都不起作用——标准的System.Web.UI.WebControls.GridView 就是其中之一,但我不知道您正在使用的库中的grid 控件。请注意,由于MVCWebForms 之间的差异,任何需要ViewState 的控件都将无法正常工作。


    澄清:如果不使用GridViewViewstatePostBack 功能,它当然也可以在ASP.NET MVC View 中使用。但是,没有要覆盖的OnLoad 事件,因为页面没有相同的生命周期,所以如果要使用此控件,已经建议的解决方案可能是最好的。

    <%
        grid.DataSource = Model;
        grid.DataBind();
    %>
    

    还要确保在页面顶部有这个。

    【讨论】:

    • 我在问题中提到的示例是同一个网格控件。他让它工作,但他必须在后面的代码中覆盖 OnLoad 事件。我正在尝试找到一种方法来做到这一点,而无需在文件后面创建代码。我可以关闭视图状态和回发功能。
    • 您应该只使用
      然后它们应该工作吗?!
    • 否 - 添加
      标签不会使视图状态在 MVC 中工作。主要是因为对 WebForms 应用程序的多次请求是通过 js 回发完成的,而 MVC 应用程序请求通过控制器,控制器事先不知道将在哪个视图上呈现。
    【解决方案3】:

    不创建代码隐藏文件的最简单方法是将其添加到 .aspx 页面的任何位置:

    <script runat="server">
      private void Page_Load(object sender, System.EventArgs e)
      {
         //Initialize your control.
      }
    </script>
    

    【讨论】:

    • 做到了。我不知道为什么我一开始没有想到这个。
    • 谢谢。我必须这样做才能使我的 Active Report 正确生成并绑定到我的 WebViewer 控件。回复:stackoverflow.com/questions/668328
    【解决方案4】:

    Here is a video and downloadable sample project showing how to use the Developer Express controls within an MVC project.Developer Express 对 MVC 的支持据说即将推出。目前,您必须解决有关事件处理和对视图状态的依赖的问题。但我最近听到的是他们确实打算支持 MVC。

    【讨论】:

    • 是的,就是我说的那个人让它发挥了作用。正如我解释的那样,他必须使用文件隐藏代码。
    猜你喜欢
    • 2010-10-13
    • 2010-10-27
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2010-11-10
    • 2013-03-02
    相关资源
    最近更新 更多