6

Für mehrere Tage kann ich einfach nicht das Problem selbst finden, das macht mich wirklich verrückt.Controller generieren wenige Threads, obwohl nicht gefragt

Ich habe asp.net (mvc4) Web-Anwendung, wo gibt es mehrere Indexseiten (Liste anzeigen), wenn Sie auf ein Element in der Liste klicken, gibt es Bearbeitungsansicht Seite zurück. Auf der Bearbeitungsseite (in der Ansicht selbst) gibt es eine Schaltfläche zum Absenden, die die Datenbank aktualisieren und auf die Indexseite umleiten sollte.

(Zuerst wurde "submit" mit HTML-Code über Teilansicht geladen, aber ich habe es so geändert, dass ich zur Indexseite umleiten kann - weil "untergeordnete Aktionen keine Redirect-Aktionen ausführen dürfen").

Das Problem ist also, dass der Controller nicht auf die Indexseite umleitet.

Wenn ich einen Breakpoint in der Post-Funktion im Controller setzen, sehe ich, dass einige Threads den Code ausgeführt, obwohl nicht nach Threads gefragt, und wenn ich mit dem Cursor auf einen der Prozesse Debug-Pfeile stehen, kann ich Nachricht sehen " der Prozess oder der Thread hat sich seit dem letzten Schritt geändert ".

Irgendwie weiß ich nicht, wie, löste ich das Problem auf einer Seite (weiß nicht wie, weil ich nicht weiß, was das verursacht), aber manchmal (zufällig) es erscheint wieder, und auf der anderen Seite tat ich nicht schaffen, es zu lösen.

Hier ist ein Code aus Controller und aus Sicht:

Controller:

[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(); 
    } 
} 

Ausblick:

@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") 
} 

Teilansicht Code:

@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; 
     }); 
    }); 
}); 

Also - ich hoffe, ich habe mein Problem klar gemacht. Ich habe einige Beiträge zu diesem Thema durchgesehen, und keiner von ihnen hat mir geholfen. Das Problem tritt auch in Chrome und im IE auf.

EDIT # 1 - Beim Auskommentieren der Teilansichten verschwindet das Problem auf allen Seiten!

EDIT # 2 - Scheint, dass ein Problem mit Schaltflächen in Teiltönen, die andere Controller-Aktionen verwenden, ist.

EDIT # 3 - Ich habe Code der Teilansicht mit @ Html.Action() geladen, die ein Skript für jquery-ui Dialog enthalten.

+2

Wie renderst du deine Teilansichten - rufen sie andere Controller-Aktionen auf? – Paddy

+1

Ich verwende @ Html.Action(). Und ja, sie verwenden andere Controller-Aktionen. – ayheber

Antwort

1

Oh Herr sein! Es war eine harte Woche, aber ich habe wenigstens eine Lektion gelernt.

Das Problem bestand aus zwei Teilen:

(1) EF und Datacontext Management (I re-Tag der Frage).
Ich verwendete eine einzelne statische Instanz (Singleton) von DataContext, und es erwies sich als ineffektiv und problematisch.

Also ich war auf der Suche nach einigen Informationen und festgestellt, dass es bessere Implementierungen für DataContext Management gibt (Sie können lesen here) und jetzt - alles scheint richtig!

(2) jQuery validiert alle Teiltöne auf Formular senden. Ich musste einen Weg finden, damit umzugehen.

Eine Lösung von einem Teil ohne den anderen - ergab kein gutes Ergebnis.

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

     return false; 
    }); 

Sollte wie

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

     return false; 
    }); 
+0

Sorry, aber ich bekomme einen Fehler für diese Korrektur. – ayheber

Verwandte Themen