首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法加载类型的System.Web.Mvc.ViewUserControl<somethig>

无法加载类型的System.Web.Mvc.ViewUserControl<somethig>
EN

Stack Overflow用户
提问于 2017-04-19 12:43:46
回答 2查看 2.6K关注 0票数 0

我花了一整天的时间来寻找解决方案。我找到了一些但对我没有用。很短的时间,我正在开发的应用程序正在从MVC3 (我相信)升级到MVC5和ASP.NET版本4.6.1。升级是由其他开发人员完成的,现在我必须修复他留下的所有问题和错误。我面临的问题是我无法加载强类型视图。从我的主要观点出发,我引用了该操作方法:

代码语言:javascript
复制
<div id="fromLocationEditPartial">
     @Html.Action("FormLocationEdit", "Shared", new { area = "Shared", options = Model.LocationID });
</div>

下面是我调用的操作方法代码:

代码语言:javascript
复制
 public ActionResult FormLocationEdit(int? options)
    {
        LocationEditorModel model = new LocationEditorModel();

        //DTLocationAutoMetadata locObj;
        DTLocation locObj;

        if (options.HasValue)
        {
            int locationID = options.Value;
            //locObj = AutoMapper.Mapper.Map<DTLocation, DTLocationAutoMetadata>(entities.DTLocation.Where(m => m.LocationID == locationID).FirstOrDefault());
            locObj = entities.DTLocation.Where(m => m.LocationID == locationID).FirstOrDefault();

            if (locObj == null)
            {
                locObj = new DTLocation();
                locObj.SelectLocation = new SelectList(model.GetListOfLocations(), "Value", "Text");
            }
            else
            {
                locObj.SelectLocation = new SelectList(model.GetListOfLocations(), "Value", "Text", locObj.SiteID);
            }
        }
        else
        {
            locObj = null;
        }

        return View("~/Areas/Shared/Views/FormLocationEdit.ascx", locObj);
    }

在这里,您可以看到它应该返回带有对象的强类型视图。下面是我的共享视图的样子:

代码语言:javascript
复制
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMDBv3.DTLocationAutoMetadata>" %>
<script type="text/javascript">
   $(document).ready(function () {
    //BindSubmitActions('formLocationEdit');
   })
</script>
<% using (Html.BeginForm("FormLocationEdit", "Shared", FormMethod.Post,  new { area="Shared", id = "formLocationEdit" })) {%>
***here is the condition if (Model!=null) do something else display model data***

在我的VS错误列表中,我有错误:

错误4名称'Model‘在当前上下文中不存在错误2当前上下文中不存在名称'Html’

当我运行proj时,我得到的是内部异常:

无法加载类型的System.Web.Mvc.ViewUserControl"<"CMDBv3.DTLocationAutoMetadata">“

据我所知,这是版本控制方面的一些问题,但我检查了所有的web.config,并且看起来版本还不错。有人能给我一些建议吗?如果不是web.config问题,还会是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-03 11:49:29

我解决这个问题的方式只是简单地创建了cshtml视图并使用了剃刀语法:

代码语言:javascript
复制
@model CMDBv3.DTLocation

@using (Html.BeginForm("FormLocationEdit", "Shared", FormMethod.Post, new { 
area = "Shared", id = "formLocationEdit" }))

这对我来说很管用。

票数 0
EN

Stack Overflow用户

发布于 2017-04-20 02:06:00

我过去在使用ASCX共享用户控件将MVC 3(或4)项目升级到MVC 5并默认启用Razor视图(缺少ViewUserControl命名空间)时也遇到了类似的问题,因此,我试图在该区域视图目录中的web.config文件中添加以下行,然后正常工作:

代码语言:javascript
复制
<system.web>
    <pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <controls>
            <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
        </controls>
    </pages>
</system.web>

注意:此更改也适用于其他区域视图的web.config,其中包含继承System.Web.Mvc.ViewPage/System.Web.Mvc.ViewUserControl的ASPX页/ASCX控件。

然后,在该区域视图的web.config中,确保在system.web.webPages.razor元素之间添加了以下行:

代码语言:javascript
复制
<system.web.webPages.razor>
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
</system.web.webPages.razor>

要解决“模型不存在”的问题,可以在项目的web.config中更改这一行:

代码语言:javascript
复制
<add key="webpages:Version" value="1.0.0.0" />

到这一行:

代码语言:javascript
复制
<add key="webpages:Version" value="3.0.0.0" />

有关升级到MVC 5的更多信息,请查看MVC 5 Upgrade Guide

PS:当web.config目录中的Views文件(包括区域视图)尚未包括或尚未创建时,经常会出现缺少名称空间的问题。另外,如果您仍然不确定,请尝试在与System.Web.Mvc命名空间相关的引用属性中设置System.Web.Mvc。毕竟,似乎更容易创建一个新的预定义MVC 5项目,并将相关的现有资源分解到其中。

相关问题:

'

"The name 'HTML' does not exist in the current context" in MVC 3 Views

Razor View throwing "The name 'model' does not exist in the current context"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43496116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档