2016-06-26 65 views
1

我正在MVC中创建一个web应用程序,当它在本地运行时很好。我最近将它部署到Azure,并遇到了一些问题。我创建了一个Area并忘记添加一个web.config文件和_viewStart.cshtml。asp.net MVC页面在web服务器上失败,但在本地机器上运行良好

一旦这些文件被添加,应用程序一直工作正常,除了一页。当我导航到编辑页面时,页面将显示“处理请求时发生的错误”,其中renderbody()部分将出现在此处。

控制器:

public ActionResult EditTest(int? id) 
    { 
    if (id == null) 
    { 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
    } 

    ROUND_DETAILS rOUND_DETAILS = db.ROUND_DETAILS.Find(id); 
    if (rOUND_DETAILS == null) 
    { 
     return HttpNotFound(); 
    } 
    return View(rOUND_DETAILS); 
    } 

视图(小版)

@model TM470FinalProject.Areas.GolfApp.Models.ROUND_DETAILS 

@{ 
    ViewBag.Title = "Edit"; 
} 

<h2>Edit</h2> 

<div> 
@Html.ActionLink("Back to List", "Index") 
@Model.TEE.GOLF_COURSE.COURSE_NAME 
</div> 

<table class="table form-group"> 
<tr> 
    <th>Hole Number </th> 

    @for (var i = 0; i < 9; i++) 
    { 

    <th>@Model.HOLE_SCORE.ElementAt(i).HOLE_NUMBER</th> 
    } 

</tr> 
</table> 
@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 

}

,我已经看到似乎没有什么意义我的应用程序工作中的其他页面的信息:

The type or namespace TM470FinalProject could not be found (are you missing a using directive or reference assembly). 

而且

The name 'model' does not exist in the current context. 

对于上面的例子:如果我在考虑到上述消息仍然存在删除表,但@Model.TEE.GOLF_COURSE.COURSE_NAME显示过程的名称作为我期望。

我相信这个问题是ElementAt(i)代码:

@Model.HOLE_SCORE.ElementAt(i).HOLE_NUMBER

这是我不明白为什么它是失败的,因为我有一个使用类似的代码,并能正常工作的另一个视图(但在web服务器仍然标记上面的2条消息)。

当我在本地机器上写入Razor视图时,intellisense给了我ElementAt选项。

查看:

@model TM470FinalProject.Areas.GolfApp.Models.TEE 

@{ 
    String s = ViewBag.golfcourse.COURSE_NAME; 
    int ttlPar; 
    int ttlYards; 
} 
@{ 
    ViewBag.Title = "Edit Tee: " + s ; 
} 

<h2>@s</h2> 

<h3>Edit Tee: @Model.TEE_NAME </h3> 

<table class="table"> 
<tr> 
    <th>Hole Number </th> 
     @for (var i = 0; i < 9; i++) 
    { 
    <th> @Model.HOLE_DETAILS.ElementAt(i).HOLE_NUMBER</th> 
    } 
</tr> 
</table> 

在我的模型,他们也有类似的定义:

public virtual ICollection<HOLE_SCORE> HOLE_SCORE { get; set; }

public virtual ICollection<HOLE_DETAILS> HOLE_DETAILS { get; set; }

当我调试器附加导航到第一,当我得到以下输出查看:

Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll 
Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in System.Core.dll 
Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in System.Web.Mvc.dll 

我的看法webconfig显示:

<?xml version="1.0"?> 

<configuration> 
<configSections> 
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
</sectionGroup> 
</configSections> 

<system.web.webPages.razor> 
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
<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.Optimization"/> 
<add namespace="System.Web.Routing" /> 
<add namespace="TM470FinalProject" /> 
</namespaces> 
</pages> 
</system.web.webPages.razor> 

<appSettings> 
<add key="webpages:Enabled" value="false" /> 
</appSettings> 

<system.webServer> 
<handlers> 
<remove name="BlockViewHandler"/> 
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
</handlers> 
</system.webServer> 

<system.web> 
<compilation> 
<assemblies> 
<add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
</assemblies> 
</compilation> 
</system.web> 

它本地工作,并在Web服务器上一个页面正常工作与类似的代码,所以我茫然地解释为什么这正在发生。

我将不胜感激任何帮助/解决这个问题的方向。另外,你知道如何检索堆栈跟踪调试器生成的异常吗? (Im新到asp。网)

回答

0

它混淆了我,因为我无法理解为什么它在本地,而不是工作在Web服务器上..所以我添加下面一行到共享错误(视图\共享\ Error.cshtml)页: <p>@Model.Exception.Message</p>

的网页则显示错误页面上的其他信息:

Specified argument was out of the range of valid values. Parameter name: index

再次,这不应该发生作为填充集合是通过对我的数据库触发器创建的数据。我开始思考通过Viewbag发送数据,并且增加了分数页面呈现时的计数:

@ViewBag.hole_scores.Count

本地这个返回的18不如预期,但在Web服务器上它返回0。

当我第一次向Azure发布我的应用程序时,我不得不在门户网站中设置数据库,因为我无法导出/复制我的本地数据库。不幸的是我的数据库构建脚本似乎已经失去了触发器代码,因此当我创建一个新的对象时,它并没有像我期望的那样填充集合。

经过一周的大坝计算机大喊之后,这一切都归结为用户错误,并没有正确设置数据库构建脚本。

相关问题