none
ASP.NET MVC问题 ViewUserControl的问题 RRS feed

  • 问题

  • 在asp.net mvc中的Views文件夹下的任何一个文件夹下创建一个View User Control,目录结构如下:

    -- MyTest
       |-- Views
            | -- Home
                 | -- ucView.aspx

    ,文件内容大致如下:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<MyTest.Models.Test>>" %>
    
    ...........省略下面........

    然后在一个view页面调用这个user control没有任何问题。

    但是,如果把这个文件不放在Views文件夹里,比如新建一个文件夹叫UserControls,和Views目录平行:
    -- MyTest
       |-- UserControls
            | -- ucView.aspx

    然后在View页面调用就会报如下错。

    未能加载类型“System.Web.Mvc.ViewUserControl<IEnumerable<MyTest.Models.Test>>”。

    我试着如果不用强类型,去掉强类型就可以运行。
    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
    

    请问是不是如果要用MVC的User Control的强类型一定把user control放到Views文件夹下面?如果不是如何解决?

    非常感谢!
    Newbie
    2009年5月26日 8:20

答案

  • 一般来说,界面什么的最好放到Views下面,对应的方法就放到Controllers下面比较好,你放到外面,我觉得和MVC就有点背道而驰了。。

    去掉强类型,当然他就不会检查你的类型错误了。。

    低调,低调
    哈哈,书出了,可以点这里购买哦。。
    • 已标记为答案 Shawn Jiang 2009年5月26日 10:50
    2009年5月26日 8:32
    版主

全部回复

  • 你换了一个文件夹,当然要换相应的controller了啊。。
    低调,低调
    哈哈,书出了,可以点这里购买哦。。
    2009年5月26日 8:30
    版主
  • 一般来说,界面什么的最好放到Views下面,对应的方法就放到Controllers下面比较好,你放到外面,我觉得和MVC就有点背道而驰了。。

    去掉强类型,当然他就不会检查你的类型错误了。。

    低调,低调
    哈哈,书出了,可以点这里购买哦。。
    • 已标记为答案 Shawn Jiang 2009年5月26日 10:50
    2009年5月26日 8:32
    版主
  • 一般来说,界面什么的最好放到Views下面,对应的方法就放到Controllers下面比较好,你放到外面,我觉得和MVC就有点背道而驰了。。

    去掉强类型,当然他就不会检查你的类型错误了。。

    低调,低调
    哈哈,书出了,可以点这里 购买哦。。
    谢谢你的回复。

    那是不是说强类型的user controls一定要放在Views下面呢?否则就不可以通过类型检测?请问MVC就是这样设计的吗?

    如果我在Views下面新建一个文件夹叫UserControls专门放user controls,那mvc怎么知道我的这个文件夹是Controller下属的文件夹(比如一个Controller叫UserControlController的相应的Views)还是我自己手动创建的文件夹呢?

    Thank You。。。

    Newbie
    2009年5月26日 8:39
  • 你创建了一个新的文件夹,假设教UserControls放user controls,在controller里面你应该创建一个这样的controller,名字叫UserControlsController(需要同名+Controller),然后就创建了这个View的Controller。创建好之后,里面的每个页面,比如UserControls/abc.aspx应该在UserControlsController里面有个同名的方法,应该是

            public ActionResult abc()
            {
                return View();
            }

    这样就创建好了,可以通过UserControls/abc访问。。

    低调,低调
    哈哈,书出了,可以点这里购买哦。。
    2009年5月26日 9:05
    版主
  • 不要把 usercontrol 和web form 的混淆了      mvc 的 ascx 只是部分视图 partial view  
    你建立UserControls 文件夹的出发点   本身就是违背了 mvc 的设计


    紫柔版主的头像真叫萌得一个不行啊。。。。
    2009年5月26日 9:05
  • 不要把 usercontrol 和web form 的混淆了      mvc 的 ascx 只是部分视图 partial view  
    你建立UserControls 文件夹的出发点   本身就是违背了 mvc 的设计


    紫柔版主的头像真叫萌得一个不行啊。。。。
    嗯,有道理,不过现在MVC也支持服务器控件的,所以怎么说呢,想用也可以用,就是不太标准。。
    低调,低调
    哈哈,书出了,可以点这里购买哦。。
    2009年5月26日 9:13
    版主
  • ok,谢谢各位老大。

    我把我UserControls里的所有user controls移到了本来就有的Shared文件夹下,我看Oxite程序也是这么写的。
    Newbie
    2009年5月26日 9:53
  • 呵呵,好,参考一下别人的代码页不错。。

    另外,想清楚了标记为答案啊。。谢谢啦啊。。

    低调,低调
    哈哈,书出了,可以点这里购买哦。。
    2009年5月26日 9:55
    版主
  • 呵呵,好,参考一下别人的代码页不错。。

    另外,想清楚了标记为答案 啊。。谢谢啦啊。。

    低调,低调
    哈哈,书出了,可以点这里 购买哦。。
    差点忘了。多谢~

    Newbie
    2009年5月26日 10:50