2017-04-25 7 views
0

私のコードに関しては問題があります。私のViewBag.Messageは動作していません。なぜ私のページに表示されず、最終的に私をインデックスにリダイレクトせず、現在のコントローラに固執しません。ここに私のコードは次のとおりです。ViewBag.Message not working

コントローラ

public IActionResult AddPayments() 
    { 
     try 
     { 
      var sqlQuery = "INSERT INTO LoanPayments (LoanID, DateOfPayment, AmountOfPayment, Remarks) " + 
      "SELECT lc.LoanID, " + 
      " CONVERT(DATE, GETDATE(), 101), " + 
      " ISNULL(CAST(((lt.InterestRate/100) * lc.LoanAmount) + lc.LoanAmount/((dbo.fnNumberOfYears(CONVERT(VARCHAR(15), LoanDateStart, 101), CONVERT(VARCHAR(15), LoanPaymentDue, 101)) * 12) * 2) AS DECIMAL(18,2)), 0), " + 
      " 'Loan Ledger Created For ' + CAST(GETDATE() AS VARCHAR(50)) " + 
      " FROM LoanContract lc " + 
      " INNER JOIN LoanType lt ON lt.LoanTypeID = lc.LoanTypeID "; 
      _Context.Database.ExecuteSqlCommand(sqlQuery); 

      ViewBag.Message = "Has successfully created payments today."; 

      return RedirectToAction("Index"); 
     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 

    public IActionResult Index() 
    { 
     return View(); 
    } 

ビュー

<h2>Create Payment</h2> 
 
<span>@ViewBag.Message</span> 
 
<a asp-controller="Payment" asp-action="AddPayments" class="btn btn-primary">Secondary</a>

任意の助けをいただければ幸いです!

+0

http://stackoverflow.com/questions/7756464/how-do-i-render-html-from-the-viewbag-using-mvc3-razor –

+0

こんにちは@BobSwager私はそれを試みたが、それも動作しません...それはhtmlで何もレンダリングしていないようだ。 –

+0

AddPayments()からビューを返す必要があります。インデックスにリダイレクトしないでください。 –

答えて

1

ViewBagの代わりにTempDataを使用すると、リダイレクトで永続化されますが、コメントに指摘されているように、これは悪い考えです。これを行う必要がないようにコードをリファクタリングする必要があります...

私があなただったら私はリファクタリングでしょうアイデアは、インデックス表示にRouteValueとしてメッセージを渡すことであろうが、やはり、これは非常にきれいではありませんベター...

編集(簡体例):

public IActionResult AddPayments() 
    { 
     try 
     { 
      ... // Omitted 

      return RedirectToAction("Index", "Home", new { message = "Has successfully created payments today."); 
     } 
     catch (Exception) 
     {  
      throw; 
     } 
    } 

    public IActionResult Index(String message) 
    { 
     return View((Object) message); 
    } 

インデックスビューでは、@Modelを使用しますメッセージを表示する。

注:理想的には、裸の文字列を渡すのではなく、ViewModelでこれをラップしますが、これが適切なアイデアですか?

+0

はリファクタリングを実装するための参照やサンプルコードを投稿できますか?それは大きな助けになるでしょう! –

+0

@AlvinQuezon編集を参照してください。完全なもののための時間ではなく簡素化されましたが、うまくいけばあなたは考えを見る – Milney

+0

ありがとう!これは動作します! –