2016-12-16 34 views
0

我很努力地使用我的子菜單後發佈到IIS服務器。 由於某種原因,第一次重定向工作正常,它給了我一個302找到。然後,當它嘗試重定向到操作並返回一個partialview時,它會給我一個500內部服務器錯誤代碼。Html鏈接onclick,jquery函數,redirectToAction IIS服務器不工作?

我想更新另一個局部視圖內的partialview。此代碼在VS環境中本地工作,但是當我將其推送到IIS服務器時,它不起作用。

我試過尋找相當一段時間,但找不到任何有用的東西。我對MVC和IIS相當陌生。

我的HTML看起來像這樣:

<div class="wrapper"> 
    <ul id="submenu"> 
     <li><a class="LinkPart" href="#" onclick="getPartial(1);">Some subpage</a></li> 
     <li><a class="LinkPart" href="#" onclick="getPartial(2);">Some subpage</a></li> 
     <li><a class="LinkPart" href="#" onclick="getPartial(3);">Some subpage</a></li> 
     <li><a class="LinkPart" href="#" onclick="getPartial(4);">Some subpage</a></li> 
     <li><a class="LinkPart" href="#" onclick="getPartial(5);">Some subpage</a></li> 
     <li><a class="LinkPart" href="#" onclick="getPartial(6);">Some subpage</a></li> 
    </ul> 
</div> 

<div class="right-box"> 
    <div id="right-box" class="data" style="visibility:visible;"> 
     @Html.Partial("~/Views/Admin/_AdminPartial.cshtml") 
    </div> 

</div> 

的Javascript在CSHTML

function getPartial(y) { 
    $.get(location.href = '@Url.Action("_PartialPickAdminpage", "Admin")/' + y, function (data) { 
     $('div#right-box.data').html(data); 
    }) 
} 

的底部,我的控制器看起來像這樣,在動作中的一個示例:

[Authorize(Roles = "Administrator")] 
    [HttpGet] 
    public ActionResult _PartialPickAdminpage (string id) 
    { 
     int newid = Convert.ToInt32(id); 
     Debug.WriteLine("id partialpickAdminpage: " + id); 
     if (newid.Equals(1)) 
     { 
      return RedirectToAction("Register", "Account"); 
     } 
     else if (newid.Equals(2)) 
     { 
      return RedirectToAction("_SomePagePartial"); 
     } 
     else if (newid.Equals(3)) 
     { 
      return RedirectToAction("_SomePagePartial"); 
     } 
     else if (newid.Equals(4)) 
     { 
      return RedirectToAction("_SomePagePartial"); 
     } 
     else if (newid.Equals(5)) 
     { 
      return RedirectToAction("_SomePagePartial"); 
     } 
     else if (newid.Equals(6)) 
     { 
      return RedirectToAction("_SomepagePartial"); 
     } 
     else 
     { 
      return PartialView("~/Views/Account/_ChangePasswordPartial.cshtml"); 
     } 
    } 

[Authorize(Roles = "Administrator")] 
public PartialViewResult _SomePagePartial() 
{ 
    TempData["ErrorMessage"] = ""; 
    return PartialView("~/Views/Admin/_SomePagePartial.cshtml"); 
} 

我注意到的一件事是,只要我點擊其中一個鏈接,它就會運行_Parti alPickAdminpage在本地調用兩次,但只在IIS上一次並超時。

在服務器上的日誌文件中找到了它。

2016-12-19 10:46:53 192.168.0.145 GET /playlist - 80 nasoon 192.168.0.137 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/55.0.2883.87+Safari/537.36 - 200 0 0 62 
    2016-12-19 10:46:53 192.168.0.145 GET /Playlist/Views/StyleSheet.css - 80 nasoon 192.168.0.137 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/55.0.2883.87+Safari/537.36 http://to-be-more/playlist 404 0 0 0 
    2016-12-19 10:46:53 192.168.0.145 GET /Playlist/Views/StyleSheet.css - 80 nasoon 192.168.0.137 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/55.0.2883.87+Safari/537.36 http://to-be-more/playlist 404 0 0 15 
    2016-12-19 10:47:00 192.168.0.145 GET /Playlist/Admin/AdminSection - 80 nasoon 192.168.0.137 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/55.0.2883.87+Safari/537.36 http://to-be-more/playlist 200 0 0 46 
    2016-12-19 10:47:10 192.168.0.145 GET /Playlist/Admin/_PartialPickAdminpage/1 - 80 nasoon 192.168.0.137 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/55.0.2883.87+Safari/537.36 http://to-be-more/Playlist/Admin/AdminSection 302 0 0 0 
    2016-12-19 10:47:10 192.168.0.145 GET /Playlist/Admin/_PartialPickAdminpage/1 - 80 nasoon 192.168.0.137 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/55.0.2883.87+Safari/537.36 http://to-be-more/Playlist/Admin/AdminSection 302 0 0 203 
2016-12-19 10:47:40 192.168.0.145 GET /Playlist/Account/Register - 80 nasoon 192.168.0.137 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/55.0.2883.87+Safari/537.36 http://to-be-more/Playlist/Admin/AdminSection 500 0 0 30150 
2016-12-19 10:48:10 192.168.0.145 GET /Playlist/Account/Register - 80 nasoon 192.168.0.137 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/55.0.2883.87+Safari/537.36 http://to-be-more/Playlist/Admin/AdminSection 500 0 0 40306 

賬戶控制器與註冊動作:

 [Authorize(Roles = "Administrator")] 
    [HttpGet] 
    public ActionResult Register() 
    { 
     UserRepository ur = new UserRepository(); 
     var list = ur.MyListTable(); 
     var model = new RegisterModel(); 
     model.DropDownList = new SelectList(list, "RoleID", "RoleName"); 
     return PartialView(model); 
    } 

連接字符串到數據庫,出演了用戶名和密碼:

Data Source=TO-BE-MORE\SQL2016;Initial Catalog=tbmplaylist;Persist Security Info=True;User ID=****;Password=**** 
+0

評論不適合廣泛的討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/130951/discussion-on-question-by-nasoon-html-link-onclick-jquery-function-redirecttoa)。 –

+0

System.Configuration.ConfigurationManager。 ConnectionStrings [「connectionStringName」]。ConnectionString; 。這將從webconfig中讀取連接字符串 – FakeisMe

回答

0

1)數據庫的連接不是最初發生得如此之500內部錯誤。[timeout execption]一些函數使用本地連接字符串(ADO.net)。在web.config中使用兩個連接字符串,一個用於EF,一個用於ADO.net。

<add name="Database1Entities" connectionString="metadata=res://*/Models.Database1Entities1.csdl|res://*/Models.Database1Entities1.ssdl|res://*/Models.Database1Entities1.msl;provider=System.Data.SqlClient;provider connection string='Data Source=TO-BE-MORE\SQL2016;initial catalog=tbmplaylist;MultipleActiveResultSets=True;User ID=****;Password=****;Connection Timeout=120;App=EntityFramework'" providerName="System.Data.EntityClient"/> 
<add name="Database1EntitiesADO" connectionString="Data Source=TO-BE-MORE\SQL2016;initial catalog=tbmplaylist;MultipleActiveResultSets=True;User ID=***;Password=****;Connection Timeout=120;App=EntityFramework"/> 

然後在方法調用是這樣的:

System.Configuration.ConfigurationManager.ConnectionStrings["Database1EntitiesADO"].ConnectionString 

2)被稱爲將返回一個ActionResult動作。所以不會得到部分結果。

3)Redirecttoaction創建一個新的請求,所以初始查詢將首先被執行,然後end_request將被調用,然後new_request被創建,這是兩次執行的原因。

更改的jQuery腳本看起來像這樣固定的問題2和3:

 function getPartial(y) { 
     $.get('_PartialPickAdminpage/' + y, function (data) { 
      $('div#right-box.data').html(data); 
     }) 
    }