2016-07-01 9 views
0

Also technisch was ich habe funktioniert, aber es ist EXTREM langsam.Entfernen Sie Tabelle Spalte basierend auf Benutzergruppe Mitgliedschaft

Zusammenfassend: Ich frage eine Datenbank nach Daten und erstelle dann ein Ansichtsmodell, das diese Daten gepaart mit einem Objekt enthält, das Benutzer-AD-Daten enthält.

Hier ist meine Viewmodel:

public class SearchViewModel 
{ 

    public List<Submission> submissionList { get; set; } 
    public LoggedInUser User 
    { 
     get 
     { 
      return new LoggedInUser(); 
     } 
    } 
} 

public class Submission 
{ 
    //... All the things ... 
} 

LoggedInUser ist eine Hilfsklasse, die ich habe, die mehrere verschiedene Anzeigenattribute enthalten, aber für diese Angelegenheit Ich betrachte einen Bool-Wert namens isAdmin. Wenn Admin ist True Ich möchte eine bestimmte Spalte angezeigt werden.

So mache ich es über Razor/Html.

<table class="datatable table table-bordered table-condensed"> 
    <thead> 
     <tr> 
      //. . . Column Headers . . . 

      @if(Model.User.isAdmin) 
      { 
       <th /> 
      } 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (var item in Model.submissionList) 
     {     
      <tr id="@item.ID"> 
       //. . . Column Content . . . 

       @if(Model.User.isAdmin) 
       { 
        <td> 
         <div id="[email protected]"> 
           <a href="#" onclick="quickApprove(@item.ID)"> 
            <i class="fa fa-check text-success fa-lg" data-toggle="tooltip" data-placement="top" title="Submit for approval!"></i> 
           </a> 
         </div> 
        </td> 
       } 
      </tr> 
     } 
    </tbody> 
</table> 

Wenn ich die Prüfungen für die isAdmin entfernen, zeigen die Informationen viel schneller. Von 5 Minuten auf ungefähr 10 Sekunden.

Gibt es möglicherweise eine bessere Implementierung mit Javascript?

+1

Bitte beachten Sie, dass der Model-View-Controller-Tag für Fragen über das Muster ist. Es gibt ein bestimmtes Tag für die ASP.NET-MVC-Implementierung. –

Antwort

0

Wie instanziieren Sie Ihre SearchViewModel Klasse? Wenn Sie es direkt tun, sollten Sie eine bestimmte Eigenschaft mit dem Namen isAdmin erstellen und setzen Sie den Wert auf instantiate, wie folgt aus:

public class SearchViewModel 
{ 
    public List<Submission> submissionList { get; set; } 
    public bool isAdmin { get; set; } 
} 

Und dann ..

var user = new LoggedInUser(); 
var viewModel = new SearchViewModel { 
    submissionList = submissionList, //supose you already have this value 
    isAdmin = user.isAdmin 
}; 

Ihr Rasierer diese geändert werden würde:

<table class="datatable table table-bordered table-condensed"> 
    <thead> 
     <tr> 
      //. . . Column Headers . . . 

      @if(Model.isAdmin) 
      { 
       <th /> 
      } 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (var item in Model.submissionList) 
     {     
      <tr id="@item.ID"> 
       //. . . Column Content . . . 

       @if(Model.isAdmin) 
       { 
        <td> 
         <div id="[email protected]"> 
           <a href="#" onclick="quickApprove(@item.ID)"> 
            <i class="fa fa-check text-success fa-lg" data-toggle="tooltip" data-placement="top" title="Submit for approval!"></i> 
           </a> 
         </div> 
        </td> 
       } 
      </tr> 
     } 
    </tbody> 
</table> 
+0

Das ist eigentlich, wie ich es implementiert habe. Ich hatte gerade keine Chance, meine Frage zu aktualisieren. – Johnrad

Verwandte Themen