2017-04-07 14 views
0

あるコホートで二重引用符を追加しているかどうかを確認しようとしている場合は、「コホートにIDが既に存在しています」という警告メッセージをWebページに出力し、既存のIDを再度入力することはできません。 ifステートメントでチェックしましたが、ELSEステートメントのWebページに印刷する方法がわかりません。ここでC#コードでWebページに印刷

私はコントローラに変更しようとしているC#ファイル内のコードです:

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 
    } 

そして私はどのように私はそれに応じてビューでCSHTMLファイルを編集する必要があるかわからない... ここで私は私のindex.cshtmlファイルに持っていたものです:

<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> 

だから私の質問です:私はコントローラにELSE文で追加する必要がありますし、ビューの中で何を修正しますか?

答えて

1

警告が致命的でない場合、つまりすべての処理がスムーズに行われるようにフローを継続する必要がある場合、コードから挿入を行う情報を複数返す必要があります。成功したかどうか、あります。あなたは結果クラスのいくつかの種類とオフおそらく方が良いだろうということを意味

は今、これを行うには多くの方法があるが、これがうまくいけば、あなたについての考えを与える迅速書かれたものです何か私は話している。 Resultクラスをスキップして、List<string>を返すためにまっすぐに進むことができますが、将来(このコードを含む)このコードを読もうとする人から実際の意図が隠されています。わかりやすい名前とプロパティを持つクラスを返すということは、コードの背後にあるアイデアを理解することが非常に簡単であることを意味します。

Resultクラスは、他の情報(成功した回数や失敗したものなど)を使用して、その情報をビューに表示する場合に、最大限に簡素化されています。

の挿入を行い、あなたの方法で次に
public class Result{ 
    public List<string> Warnings {get;} = new List<string>(); 
} 

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

コントローラーで:

ViewBag.Result = MyInsertMethod(...); 

ビューで:

<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

ありがとうございました!私のメソッドが: public ActionResult Create(CustomCohort cc)の場合結果と同じように機能しますか? – Sophie

+0

そして、私はこの行をどこに置くべきですか?コントローラの "ViewBag.Result = MyInsertMethod()"? "MyInsertMethod()"がすでにコントローラに入っているので...ありがとうございました! – Sophie

+0

'' 'ViewBag.Whatever' 'はあなたの例ではアクション(' '' 'Create(CustomCohort cc)' '')に入ります。実際の挿入は、コントローラのアクション内にあるすべてのもの、つまりSQLクエリ、データ処理、ビューの設定が混乱を招くため、独自の方法で最適になります) – Gerino

関連する問題