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

How to perform enable/disbale or hide/unhide in asp.net mvc 2

我正在通过controller传递一些viewdata和view bag到视图,下面是代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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);
    }

查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<% 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隐藏在视图中,因此出现错误:无法在a上执行运行时绑定空引用。任何建议或替代方案将比x受到高度赞赏。


Any suggestions or alternatives will be highly appreciated thanx.

您是否考虑过使用ViewModel?

当处理单个字段等不需要"模型"的情况时,ViewBag很好,但是您那里有很多代码,我看到诸如Helmet和Garage之类的名词-因此您应该使用ViewModel。

然后您可以使用:

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

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

您可以为SecondDriver类型创建显示模板,然后将标记移到那里,这意味着您可以在任何视图中重复使用它。

不了解您,但是当我进行MVC开发时,我的第一目标是保持View整洁,并且没有代码汤-这是您当前拥有的。


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

1
ViewBag.MyStuffIsNull = (MyStuff == null);

然后在您的视图中可以使用此属性测试是否为空:

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