2013-05-20 15 views
8

Chức năng tìm kiếm của tôi dường như tiếp tục trong một vòng lặp vô hạn, mỗi lần gỡ lỗi của tôi chạm vào hành động bên dưới hành động POST được kích hoạt.Không đủ ngăn xếp để tiếp tục thực hiện chương trình một cách an toàn. ASP.NET MVC 4

Trong Masterpage.cshtml của tôi, tôi đã hành động sau đây:

<li>@Html.Action("Search", "Search")</li> 

Đây là phần mà được các lỗi của sau:

Thiếu ngăn xếp để tiếp tục thực hiện chương trình một cách an toàn. Điều này có thể xảy ra do có quá nhiều chức năng trên ngăn xếp cuộc gọi hoặc chức năng trên ngăn xếp sử dụng quá nhiều không gian ngăn xếp.

Trong SearchController của tôi, tôi có một GET và POST ActionResult phương pháp:

[HttpGet] 
     public ActionResult Search() 
     { 
      return PartialView("SearchFormPartial"); 
     } 

một này trả về một lần xem một phần mà có sau nội dung:

@using (Ajax.BeginForm("Search", "Search", FormMethod.Post, 
     new AjaxOptions 
     { 
      InsertionMode = InsertionMode.Replace, 
      HttpMethod = "POST" 

     })) 
{ 
<div> 
    @Html.TextBox("query", "", new { @class = "search-query", @placeholder="Search news...", @spellcheck="false"}) 
    <input type="submit" value="Search" /> 
</div>  
} 

của nó về cơ bản là một hình thức với textbox và nút gửi.

Đây là http post ActionResult:

[HttpPost] 

    public ActionResult Search(string query) 
    { 
     if (query != null) 
     { 
      try 
      { 

       var searchlist = rep.Search(query); 

       var model = new ItemViewModel() 
       { 
        NewsList = new List<NewsViewModel>() 
       }; 

       foreach (var NewsItems in searchlist) 
       { 
        FillProductToModel(model, NewsItems); 
       } 


       return View("Searchresults", model); 
      } 
      catch (Exception e) 
      { 
       // handle exception 
      } 
     } 
     return View("Error"); 


    } 

Nó trả về một cái nhìn với một viewmodel chứa ảnh nào phù hợp với truy vấn.

Khi tôi gỡ lỗi, mọi thứ hoạt động hoàn hảo nhưng mọi thứ dường như được lặp lại vô cùng.

Quan điểm cho SearchResult trông như thế này:

@model Namespace.ViewModels.ItemViewModel 
@if (Model.NewsList.Count == 0) 
{ 
    <h3 class="text-error">No items matched your search query!</h3> 
} 
else 
{ 
    foreach (var result in Model.NewsList) 
    { 
     // display search results 
    } 
} 

exacly là gì đi sai ở đây gây ra vòng lặp vô hạn này? và làm thế nào tôi có thể sửa nó?

Trong stack trace tôi tìm thấy những trường hợp ngoại lệ

[HttpException (0x80004005): Error executing child request for handler 

'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'.]

ngoại lệ này dường như bị lặp đi lặp lại

+0

không, nhưng khi lặp lại được thực hiện, nó nhảy đến masterpage.cshtml và Html.Action ("Tìm kiếm", "Tìm kiếm" ") có ở đó. – Obsivus

+0

Bạn gặp lỗi khi bạn đăng lên hành động Tìm kiếm? –

+0

Tôi nhận được lỗi khi tôi ngừng chạy ứng dụng webb .. khác vòng lặp vô hạn của nó có nghĩa là khi tôi nhập văn bản và nhấp vào gửi chỉ cần tải – Obsivus

Trả lời

8

Html.Action trong trang cái gọi phương thức Tìm kiếm với yêu cầu POST, vì vậy khung sẽ không gọi hành động trả về một phần nhưng cái kia trả về một ViewResult với trang cái. Điều tương tự sẽ xảy ra một lần nữa và bạn sẽ thực hiện các cuộc gọi đệ quy.

Giải pháp đơn giản nhất là đổi tên hành động Tìm kiếm phản hồi yêu cầu POST. Đồng thời, đảm bảo rằng biểu mẫu của bạn đăng lên hành động này nhưng vẫn giữ cùng một cuộc gọi Html.Action.

Dường như khuôn khổ sẽ vẫn cố gắng tìm hành động có thể phản hồi yêu cầu POST. Xóa thuộc tính HttpGet khỏi hành động Tìm kiếm sẽ giải quyết vấn đề này.

+0

Tôi đã đổi tên bài đăng thành hiện thực cho SearchResult và bên trong partview tôi đã thay đổi thành @using (Ajax. BeginForm ("SearchResult", "Search", FormMethod.Post, AjaxOptions mới, nhưng bây giờ tôi gặp lỗi: Lỗi thực hiện yêu cầu con cho trình xử lý 'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'. – Obsivus

+0

@Obsivus Bạn có thể nhận xét tất cả mã trong phần xem của bạn và xem nếu bạn nhận được cùng một lỗi? –

+0

nếu tôi nhận xét Không có hộp văn bản hoặc nút gửi không thể kiểm tra nó nếu nó hoạt động hoặc không – Obsivus

2

Nó không thấy chế độ xem một phần của bạn là 'Chế độ xem một phần'. Tôi đã có chính xác cùng một vấn đề nhưng thêm @{ Layout = null; } vào chế độ xem đảm bảo rằng chế độ xem không được xem là chế độ xem bình thường sẽ tải chế độ xem _Layout.

0

Vấn đề của tôi là tôi đã thêm chế độ xem mới thông qua studio trực quan và nó đã thêm trang _ViewStart.cshtml có bố cục đã gây ra đệ quy.

Các vấn đề liên quan