2017-04-07 2 views
0

Ich versuche zu überprüfen, ob Benutzer doppelte IDs in einer Kohorte hinzufügen und wenn ja, muss ich auf der Webseite eine Warnung ausgeben: "ID ist bereits in der Kohorte vorhanden" und den Benutzer zu verhindern die vorhandene ID erneut eingeben. Jetzt habe ich die if-Anweisung überprüft, aber ich weiß nicht, wie ich auf die Webseite in der ELSE-Anweisung drucken soll. HierDrucken auf Web-Seite in C# -Code

ist der Code in der C# Datei, die ich versuche, in dem Controller zu ändern:

foreach (string studentID in cc.students) 
{ 
    SqlDataReader rdr = null; 
    cmd = new SqlCommand(@"select * from CustomCohortStudent where PUID = @StudentID and cohortID = @cohortID", sqlConn); 
    rdr = cmd.ExecuteReader(); 
    if (rdr == null) 
    { 
     cmd = new SqlCommand(@"insert into CustomCohortStudents(cohortID, PUID) values (@id,@StudentID)", sqlConn); 
    } 
    else 
    { 
     // code to print warning to the webpage 
    } 

Und ich weiß nicht, wie soll ich die cshtml Datei in den Ansichten entsprechend bearbeiten .. hier ist, was ich in meiner index.cshtml Datei hatte:

<h2>Cohorts</h2> 

<a href="CustomCohort/Create">Create</a><br /><br /> 

<table class="table"> 
    <tr> 
     <!-- 
     <th> 
      @Html.DisplayNameFor(model => model.id) 
     </th> 
     --> 
     <th> 
      @Html.DisplayNameFor(model => model.name) 
     </th> 
     <th> 
      <!--Actions--> 
     </th> 
    </tr> 

    @foreach (var item in Model) 
    { 
     <tr> 
      <!-- 
      <td> 
       @item.id 
      </td> 
      --> 
      <td> 
       @item.name 
      </td> 
      <td> 
       <a href="CustomCohort/Edit/@item.id">Edit</a> | 
       <a href="CustomCohort/Delete/@item.id">Delete</a> 
      </td> 
     </tr> 
    } 
</table> 

Also meine Frage ist: Was soll ich in der ELSE-Anweisung im Controller hinzufügen und was in den Ansichten ändern?

Antwort

1

Wenn die Warnung nicht-fatal ist, dh der Fluss sollte wie bei einem reibungslosen Ablauf fortfahren, müssen Sie mehr als eine Information aus Ihrem Code zurückgeben, der den Einfügevorgang ausführt: Hat es Erfolg und was, wenn überhaupt, Warnungen? sind.

Das bedeutet, dass Sie wahrscheinlich mit irgendeiner Art von Ergebnis Klasse besser dran sein werden:

Nun gibt es diese viele Möglichkeiten zu tun, das ist ein schnell geschrieben ein, die Ihnen hoffentlich eine Vorstellung geben werden, was Ich rede von. Beachten Sie, dass Sie die Result Klasse überspringen und direkt zur Rückgabe List<string> gehen können, aber es verbirgt Ihre tatsächliche Absicht von wer auch immer wird diesen Code in der Zukunft lesen (Sie enthalten). Wenn Sie eine Klasse mit einem aussagekräftigen Namen und Eigenschaften zurückgeben, ist es sehr einfach, die Idee hinter dem Code zu verstehen, indem Sie nur darüber streichen.

Die Ergebnisklasse ist maximal vereinfacht, wenn Sie möchten, können Sie damit andere Informationen übertragen (wie viele erfolgreich waren oder welche fehlgeschlagen sind usw.), um z. B. diese Informationen in Ihrer Ansicht anzuzeigen.

public class Result{ 
    public List<string> Warnings {get;} = new List<string>(); 
} 

Dann in Ihrer Methode, die die Einsätze tut:

public Result MyInsertMethod(...){ 
    var result = new Result(); 
    foreach (string studentID in cc.students) 
    { 
     SqlDataReader rdr = null; 
     cmd = new SqlCommand(@"select * from CustomCohortStudent where PUID = @StudentID and cohortID = @cohortID", sqlConn); 
     rdr = cmd.ExecuteReader(); 
     if (rdr == null) 
     { 
      cmd = new SqlCommand(@"insert into CustomCohortStudents(cohortID, PUID) values (@id,@StudentID)", sqlConn); 
     } 
     else 
     { 
      // code to print warning to the webpage 
      result.Warnings.Add("Something was not awesome"); 
     } 
    } 
    return result; 
} 

In Controller:

ViewBag.Result = MyInsertMethod(...); 

Nach Ansicht:

<h2>Cohorts</h2> 

if(ViewBag.Result != null){ 
    foreach(var warn in ((Result)ViewBag.Result).Warnings){ 
     <span class="warning">@warn</span> 
    } 
} 

<a href="CustomCohort/Create">Create</a><br /><br /> 
+0

Vielen Dank! Wenn meine Methode lautet: public ActionResult Create (CustomCohort cc). Funktioniert es genauso wie Ergebnis? – Sophie

+0

Und wo sollte ich diese Zeile setzen: "ViewBag.Result = MyInsertMethod()" in der Steuerung? Da die "MyInsertMethod()" schon im Controller ist ... Danke !!! – Sophie

+0

Das '' 'ViewBag.Wherever' '' geht in Ihrem Beispiel in die Aktion ('' 'Create (CustomCohort cc)' ''). Die tatsächlichen Einfügungen wären am besten in einer eigenen separaten Methode, da alles in der Controller-Aktion, sowohl SQL-Abfragen, Datenverarbeitung und Einrichten der Ansicht, es verwirrend;) – Gerino