2011-06-28 7 views
1

のasp.net MVCで/ disbaleを有効にするか、表示/非表示を実行するには、コードの抜粋です:どのように私は以下、コントローラを介してビューにいくつかのViewDataビュー袋を渡しています2

IProductRepository prodResp = new ProductRepository(); 
     Product getGarages = prodResp.GetDetailsForGarages((int)Session["EventID"]); 
     Product getHelmets = prodResp.GetDetailsForHelmet((int)Session["EventID"]); 
     if (getGarages == null) 
     { 

      ViewBag.Garages = null; 
     } 
      ViewBag.Garages = getGarages; 
      int totalGarages = getGarages.QtyAvailable; 
      var garages = Enumerable.Range(1, totalGarages).Select(x => new SelectListItem { Value = x.ToString(), Text = x.ToString() }); 
      ViewBag.GaragesDropDown = new SelectList(garages.ToList(), "Value", "Text"); 

      if (getHelmets == null) 
      { 
       ViewBag.helmets = null; 
      } 
      ViewBag.helmets = getHelmets; 
     return View(booking); 
    } 

ビュー

<% if (Convert.ToBoolean(ViewBag.boolSecondDriver)) 
         {%> 

        <lable>Second Driver Availablity For this Event</lable><br /> 
        <lable>Secondriver:</lable> <%: Html.TextBox("SecondDriver") %> 
        <br /> 
        <lable>SecondriverPrice:</lable> <%: ViewBag.trackday.SecondDriverPrice %> 
        <br /><br /> 

        <lable>Number of Helmets Available For this Event</lable><br /><br /> 
        <lable>No of Helmets:</lable><%: ViewBag.helmets.QtyAvailable%><br /> 
        <lable>Price per unit:</lable><%: ViewBag.helmets.UnitCost%> <br /><br /> 

        <lable>Number of Garages Available For this Event</lable><br /><br /> 
        <lable>No of Garages:</lable> <%: ViewBag.Garages.QtyAvailable%><br /> 
        <lable>price per unit:</lable><%: ViewBag.Garages.UnitCost%> 

        <%} 
         else{ %> 


         <lable>Second Driver Availablity For this Event</lable><br /> 
        <lable>Free</lable> 

        <br /><br /> 

        <lable>Number of Helmets Available For this Event</lable><br /><br /> 
        <lable>No of Helmets:</lable><%: ViewBag.helmets.QtyAvailable%><br /> 
        <lable>Price per unit:</lable><%: ViewBag.helmets.UnitCost%> <br /><br /> 

        <lable>Number of Garages Available For this Event</lable><br /><br /> 
        <lable>No of Garages:</lable> <%: ViewBag.Garages.QtyAvailable%><br /> 
        <lable>price per unit:</lable><%: ViewBag.Garages.UnitCost%> 

         <%} %> 

私が午前問題はviewbag.valueの値がnullの場合、私は尊敬viewbag.valuesは、したがって、私はエラーを取得しています、ビューで非表示にする必要があり、その後Viewbagを非表示にしたり再表示カントです:ランタイムを実行できませんヌル参照上のバインディング任意の提案や代替案が高く評価されます。

答えて

1

任意の提案や選択肢は非常になりますありがとうございました。

ViewModelを使用したことがありますか? 「モデル」を保証するものではありません、単一のフィールドなどを扱うときに

ViewBagは大丈夫ですが、私はヘルメットガレージのような名詞を参照して、そこにコードの多くを持っている - あなたは使用する必要がありますViewModel。

次に、あなたが使用することができます。

<%: Html.DisplayFor(model => model.SecondDriver) %> 

そしてSecondDriverがレンダリングされますnullの何物でもなかったかを。

SecondDriverのタイプのディスプレイテンプレートを作成し、そこにマークアップを移動することができます。つまり、どのビューでも再利用できます。

私はMVC開発を行うとき、私の#1目標は、ビューをきれいにし、コードスープを無料にすることです。これは現在のものです。

+0

私はあなたが正しいと思います、問題はimです2-3の表を使用してこのビューにデータを入力します。そして、このビューのビューモデルには、他のモデルのすべてのエンティティプロパティが含まれていますが、外部キーを介して関連付けられていますが、きちんとしたソリューションは、親モデルを構築し、推測.. –

+0

私は非常にユーザーコントロールのプロパティを有効にし、非表示を使用してwebformsが快適でしたが、mvcと苦労し、私は限られたスキルがあるか、またはmvcへの露出を言うことができ、 –

+0

@ムハンマド - あなたはそこに着くでしょう、仲間を心配しないでください。 WebFormsは私たち全員に毒を与えました。逸話は読まれ、学習され、コード化され、探索されます。 View/ViewModelは、親/子(例えば、ネストされたビューモデル)を含むビューのすべてに必要なものを作成する必要があります。私たちのチームは、まずViewをハードコードされたHTMLでコーディングし、作成するViewModelを知っているので、コントローラを作成してモデルからデータを取り込みます。 – RPM1984

1

あなたはViewBagに別のプロパティを追加することができます。

ViewBag.MyStuffIsNull = (MyStuff == null); 

は、その後、あなたのビューで、あなたはnullをテストするには、このプロパティを使用することができます。

<% if (ViewBag.MyStuffIsNull) { %> 
    // Do work 
<% } %> 
+0

なぜ@の前に@を使用していますか? –

+0

おしゃれなので、最近は剃刀に慣れていた... – aligray

+0

しかし、あまりにも多くのif文があります。そこには洗練された解決策があります –

関連する問題