2016-06-26 62 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發佈我的應用程序時,我不得不在門戶網站中設置數據庫,因爲我無法導出/複製我的本地數據庫。不幸的是我的數據庫構建腳本似乎已經失去了觸發器代碼,因此當我創建一個新的對象時,它並沒有像我期望的那樣填充集合。

經過一週的大壩計算機大喊之後,這一切都歸結爲用戶錯誤,並沒有正確設置數據庫構建腳本。

相關問題