如何在asp.net mvc 2中执行启用/取消或隐藏/取消隐藏

时间:2011-06-28 10:21:11

标签: asp.net-mvc asp.net-mvc-2 view viewdata

我通过控制器将一些viewdata和view bag传递给视图,下面是代码的片段:

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,因此应该在视图中隐藏受尊重的viewbag.values,因此我收到错误:无法执行运行时绑定空引用。任何建议或替代方案都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

您可以将另一个属性添加到ViewBag

ViewBag.MyStuffIsNull = (MyStuff == null);

然后在您的视图中,您可以使用此属性来测试null:

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

答案 1 :(得分:1)

  

任何建议或替代方案都将受到高度赞赏。

您是否考虑过使用 ViewModel

ViewBag在处理不保证“模型”的单个字段等时很好,但是你有很多代码,我看到 Helmet Garage等名词 - 所以你应该使用ViewModel。

然后你可以使用:

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

如果SecondDriver为null,则不会呈现任何内容。

您可以为SecondDriver类型创建显示模板,并在其中移动标记,这意味着您可以在任何视图中重复使用它。

不了解你,但是当我进行MVC开发时,我的第一个目标是保持我的View清洁并免于代码汤 - 这就是你现在所拥有的。