强类型视图差异(MVC 源代码与程序集)

发布于 2024-07-22 03:41:47 字数 930 浏览 10 评论 0原文

创建强类型部分视图

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"     Inherits="System.Web.Mvc.ViewPage<IEnumerable<Pt.Data.Services>>" %>
<table>
  <% foreach (Pt.Data.Services item in Model)
       { Html.RenderPartial("ServiceItem",item); } %>
</table>

我正在尝试在控制器中

IEnumerable<Services> Model=null;
using (tl ctx = new tl(Config.ConnectionString))
{
    Model = ctx.Services.ToList();
}
return View("List",Model);

:在引用二进制程序集 System.Web.Mvc 的项目中运行时,此方法效果很好。

但是,如果我删除二进制程序集并添加带有 MVC 源代码的项目进行调试,它就会停止识别强类型视图。

它的工作方式类似于 ViewPage 而不是 ViewPage

结果我收到错误:

编译器错误消息:CS1579:foreach 语句无法对“object”类型的变量进行操作,因为“object”不包含“GetEnumerator”的公共定义`

为什么这适用于已编译的 MVC,但不适用于源代码? 我怎样才能使源正确运行?

I'm trying to create a strongly typed partial view

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"     Inherits="System.Web.Mvc.ViewPage<IEnumerable<Pt.Data.Services>>" %>
<table>
  <% foreach (Pt.Data.Services item in Model)
       { Html.RenderPartial("ServiceItem",item); } %>
</table>

in the Controller:

IEnumerable<Services> Model=null;
using (tl ctx = new tl(Config.ConnectionString))
{
    Model = ctx.Services.ToList();
}
return View("List",Model);

This workied well when running in a project with the binary assembly System.Web.Mvc referenced.

But if I remove binary assembly and add a project with MVC sources for debugging, it stops recognizing strongly typed views.

It's working like a ViewPage instead of ViewPage<TModel>

As result I'm getting the error:

Compiler Error Message: CS1579: foreach statement cannot operate on variables of type 'object' because 'object' does not contain a public definition for 'GetEnumerator'`

Why would this work with the compiled MVC, but not with the sources? And how can I make the sources run correctly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灼疼热情 2024-07-29 03:41:47

您是否将 ~/Views/Web.config: 中的这一行更改

<pages validateRequest="false"
       pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,
                             System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                             PublicKeyToken=31BF3856AD364E35"
       pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0,
                     Culture=neutral, PublicKeyToken=31BF3856AD364E35"
       userControlBaseType="System.Web.Mvc.ViewUserControl,
                            System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                            PublicKeyToken=31BF3856AD364E35">

为这样?:

<pages validateRequest="false"
       pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,
                             System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                             PublicKeyToken=NULL"
       pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0,
                     Culture=neutral, PublicKeyToken=NULL"
       userControlBaseType="System.Web.Mvc.ViewUserControl,
                            System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                            PublicKeyToken=NULL">

实际上这是 Steve Sanderson 的 帖子 可能会有所帮助

Have you changed this line in ~/Views/Web.config:

<pages validateRequest="false"
       pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,
                             System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                             PublicKeyToken=31BF3856AD364E35"
       pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0,
                     Culture=neutral, PublicKeyToken=31BF3856AD364E35"
       userControlBaseType="System.Web.Mvc.ViewUserControl,
                            System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                            PublicKeyToken=31BF3856AD364E35">

to this?:

<pages validateRequest="false"
       pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,
                             System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                             PublicKeyToken=NULL"
       pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0,
                     Culture=neutral, PublicKeyToken=NULL"
       userControlBaseType="System.Web.Mvc.ViewUserControl,
                            System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                            PublicKeyToken=NULL">

Actually this Steve Sanderson's post might be helpful

青春有你 2024-07-29 03:41:47

我不知道可能导致引用的源项目的行为与其自己的构建输出(程序集)不同的原因。 我仍然可以推荐:
1- 确保您使用的源与构建程序集的源相同。
2- 确保添加了对源项目的引用。
3- RC 您的解决方案文件,选择干净的解决方案,然后重建并重试。

I don't know of a reason that might cause a referenced source project to behave differently than its own build output(assembly). Still I can recommend:
1- Make sure the source you're using is the same the assembly was built off.
2- Make sure you added a reference to the source project.
3- RC on your solution file, choose clean solution, then rebuild and try again.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文