2017-04-06 13 views
-2

私は思っていることがありますし、自分のコードの多くで実装してきたことがあります。私はこれを行う最良の方法ではないと思います。ロジックに基づいてMVCビューの一部を表示および非表示する最も良い方法は何ですか?

フォームを送信した後、同じページに戻り、成功メッセージを表示し、送信されたフォーム入力を非表示にしたい場合があります。また、クエリ文字列などのオプションのパラメータを持つページに移動し、そのパラメータに基づいて、ビュー上の特定のものを表示および非表示にすることもできます。

私は自分のコントローラにすべてのロジックを保存し、ロジックを私の視点に入れないのが好きなので、これを行う最善の方法はわかりません。

これは、異なるパネルの要素を分離し、csコントロールの隠しプロパティを設定するだけで、Webフォームでこれを実行できます。

MVCでこれをやっているのは、例えば、ViewBagの成功メッセージと、viewbagがnullであるかどうかを調べるif文です。 nullでない場合、成功メッセージを表示します。そうでなければ、いくつかのフォーム入力を表示します。他の時は、ビューバックを使用しません。たとえば、ショッピングカートのチェックアウトページです。あなたの見解では、カートのモデルが空であるかどうかを確認することができます。表示されている場合は、「申し訳ありません。カートが空です」というメッセージが表示されます。それ以外の場合は、カートテーブルを表示します。私は私の見解では論理でこれを扱うのは好きではない。最高の解決策は何ですか?別の解決策がありますか?

ここにいくつかのコード例があります。

コントロール:

[HttpPost] 
public ActionResult Edit(Elephants elephants) 
{ 
    // do something with elephants 

    ViewBag.weldone = "Weldone, you have made a wonderful impact by submitting this crucial knformation about elephants to the world"; 
    return View(); 

} 

ビュー:

@if(ViewBag.weldone != null) 
{ 
     <p>@ViewBag.weldone</p> 
} 

else 
{ 
     //something you want to hide from the page on succesfull elephant save 

} 

答えて

1

代わりにビューモデルを使用し、ViewBagを使用しないでください - その理由は、 "モデル・ビュー・コントローラ" と呼ばれます。

public class Elephants 
{ 
    ... 
    public string SuccessMessage { get; set; } 
} 

[HttpPost] 
public ActionResult Edit(Elephants model) 
{ 
    // do something with elephants 

    model.SuccessMessage = "yay"; 
    return View(model); 
} 

とビュー

@model Elephants 

@if (model.SuccessMessage != null) 
{ 
    <p>@model.SuccessMessgae</p> 
} 
else 
{ 
    // Redisplay Elephants 
} 

@Html.ValidationSummary() 

OR、あなたのメッセージを表示する別のページにリダイレクトすることによって、すべてのことを避けることができました。

[HttpPost] 
public ActionResult Edit(Elephants model) 
{ 
    // do something with elephants 

    return RedirectToAction("EditSuccess"); 
} 

[HttpGet] 
public ViewResult EditSuccess() 
{ 
    return View(); // Displays view "EditSuccess.cshtml" 
} 
関連する問題