我花了一整天的时间来寻找解决方案。我找到了一些但对我没有用。很短的时间,我正在开发的应用程序正在从MVC3 (我相信)升级到MVC5和ASP.NET版本4.6.1。升级是由其他开发人员完成的,现在我必须修复他留下的所有问题和错误。我面临的问题是我无法加载强类型视图。从我的主要观点出发,我引用了该操作方法:
<div id="fromLocationEditPartial">
@Html.Action("FormLocationEdit", "Shared", new { area = "Shared", options = Model.LocationID });
</div>下面是我调用的操作方法代码:
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);
}在这里,您可以看到它应该返回带有对象的强类型视图。下面是我的共享视图的样子:
<%@ 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问题,还会是什么?
发布于 2017-05-03 11:49:29
我解决这个问题的方式只是简单地创建了cshtml视图并使用了剃刀语法:
@model CMDBv3.DTLocation
@using (Html.BeginForm("FormLocationEdit", "Shared", FormMethod.Post, new {
area = "Shared", id = "formLocationEdit" }))这对我来说很管用。
发布于 2017-04-20 02:06:00
我过去在使用ASCX共享用户控件将MVC 3(或4)项目升级到MVC 5并默认启用Razor视图(缺少ViewUserControl命名空间)时也遇到了类似的问题,因此,我试图在该区域视图目录中的web.config文件中添加以下行,然后正常工作:
<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元素之间添加了以下行:
<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中更改这一行:
<add key="webpages:Version" value="1.0.0.0" />到这一行:
<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"
https://stackoverflow.com/questions/43496116
复制相似问题