6

幾天來,我無法找到問題本身,這真的讓我發瘋。控制器生成很少的線程,雖然沒有問

我有asp.net(mvc4)web應用程序,其中有幾個索引頁面(顯示列表),當點擊列表中的任何項目時,它將返回編輯視圖頁面。 在編輯頁面(在視圖本身中) - 有一個提交按鈕,它應該更新數據庫並重定向到索引頁面。 (首先,「提交」通過部分視圖加載了所有的html編輯代碼,但我改變了它,所以我可以重定向到索引頁面 - 因爲「子動作不允許執行重定向動作」)。

所以問題是,控制器不會重定向到索引頁。

當我在控制器中的post函數中放置一個斷點時,我發現很少的線程運行代碼,雖然沒有詢問線程,如果我將光標放在其中一個進程的調試箭頭上,我可以看到消息「進程或線程自上一步以來發生了變化「。我不知道如何,我在一個頁面中解決了這個問題(不知道怎麼做,因爲我不知道是什麼造成了這個問題),但有時(隨機)它又出現了,在另一頁我做了沒有設法解決它。

這裏是從控制器和從視圖中的某些代碼:

控制器:

[HttpPost] 
public ActionResult Edit([ModelBinder(typeof(OpportunityBinder))] OpportunityModel draft) 
{ 
    try 
    { 
     if (Request.Params["cancel"] != null) 
     { 
      return RedirectToAction("index", Utils.CrmDB.GetOpportunities()); 
     } 

     if (draft.IsValid()) 
     { 
      if (Utils.CrmDB.UpdateOpportunity(draft)) 
       return RedirectToAction("Index", Utils.CrmDB.GetOpportunities()); 
     } 

     return View(draft); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

檢視:

@using (Html.BeginForm()) 
{ 

    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
     /* Some divs */ 
     <p> 
      <input type="submit" value="Update" /> 
     </p> 
    </fieldset> 


    <fieldset> 
    /* Some partial views*/ 
     /* loaded using @Html.Action() */ 
    </fieldset> 

} 

@section Scripts 
{ 

    @Scripts.Render("~/bundles/jqueryval") 
    @Scripts.Render("~/bundles/modernizr") 
    @Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/jqueryui") 
} 

局部視圖代碼:

@model Genius_crm.Models.ActivityListModel 

<p> 
    <button id="dlgAddActivity"> 
     New 
    </button> 
</p> 

<div> 
    <table> 
     /* some tr and td */ 
    </table> 
</div> 



<script type="text/javascript"> 

    $(document).ready(function() { 
     $('#dlgAddActivity').each(function() { 
      var $link = $(this); 

      var pathname = window.location.pathname; 
      var parts = pathname.split('/') 
      var sub = parts[3] 

     var $dialog = $('<div id="addDialog"></div>') 
      .load('@Url.Action("AddActivityToOppPartial", "Opportunity")[email protected]&[email protected]') 
      .dialog({ 
       autoOpen: false, 
       title: $link.attr('title'), 
       width: 758, 
       height: 265, 
       resizable: false, 
       //close: function (event, ui) { window.location.reload();} 
      }); 

     $link.click(function() { 
      $dialog.dialog('open'); 

      return false; 
     }); 
    }); 
}); 

所以 - 我希望我已經明確了我的問題。 我已經通過了一些關於這個主題的帖子,並沒有人幫助我。 這個問題也出現在Chrome和IE中。

編輯#1 - 註釋掉部分視圖時,問題在所有頁面中消失!

編輯#2 - 似乎使用其他控制器操作的部分中加載的按鈕存​​在問題。

編輯#3 - 我已經添加了@ Html.Action()加載的部分視圖代碼,其中包括一個用於jquery-ui對話框的腳本。

+2

你是如何渲染你的局部視圖 - 他們是否打電話給其他控制器的動作? – Paddy

+1

我正在使用@ Html.Action()。 是的,他們正在使用其他控制器操作。 – ayheber

回答

1

哦,上帝!這是一個艱難的一週,但至少我吸取了教訓。

這個問題是由兩個部分組成:

(1)EF和DataContext的管理(I重新標記的問題)。
我使用了DataContext的單個靜態實例(singleton),結果證明它是無效的和有問題的。

所以我正在尋找一些信息,發現DataContext管理有更好的實現(你可以閱讀here),現在 - 一切看起來都是正確的!

(2)jQuery驗證表單提交的所有部分。我不得不找到一種方法來處理它。

一個部分沒有另一個的解決方案 - 沒有產生好的結果。

0
$link.click(function() { 
     $dialog.dialog('open'); 

     return false; 
    }); 

應該像

$link.click(***return*** function() { 
     $dialog.dialog('open'); 

     return false; 
    }); 
+0

對不起,但我收到此更正的錯誤。 – ayheber