【问题标题】:How to perform enable/disbale or hide/unhide in asp.net mvc 2如何在 asp.net mvc 2 中执行启用/禁用或隐藏/取消隐藏
【发布时间】:2011-06-28 18:55:29
【问题描述】:

我正在通过控制器将一些视图数据和视图包传递给视图,下面是代码的sn-p:

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 应该隐藏在视图中,因此我收到错误:无法在 a 上执行运行时绑定空引用。任何建议或替代方案将不胜感激。

【问题讨论】:

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


    【解决方案1】:

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

    您是否考虑过使用 ViewModel

    ViewBag 在处理不保证“模型”的单个字段等时很好,但那里有很多代码,我看到像 HelmetGarage 这样的名词em> - 所以你应该使用 ViewModel。

    那么你可以使用:

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

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

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

    不了解你,但当我进行 MVC 开发时,我的第一个目标是让我的视图保持干净并且没有代码汤 - 这是你目前所拥有的。

    【讨论】:

    • 我猜你是对的,问题是我正在使用 2-3 个表填充这个视图。并且该视图的视图模型不包含其他模型的所有实体属性,尽管它们通过外键相互关联,巧妙的解决方案可以像构建一个父模型并将子模型附加在其中......这样的事情我猜..
    • 我对使用用户控件的 hidden 和 enable 属性的 webforms 非常满意,但是在 mvc 上苦苦挣扎,可能是我的技能有限,或者你可以说接触 mvc 并且发现它很难解决基本问题。
    • @Muhammad - 你会到达那里的,别担心,伙计。 WebForms 毒害了我们所有人,轶事是阅读、学习、编码和探索。您应该使用 View 所需的所有内容创建一个 ViewModel,包括父/子,例如嵌套视图模型。我们的团队通常首先使用硬编码的 HTML 对 View 进行编码,然后我们知道要创建什么 ViewModel,因此我们创建它,然后执行控制器从模型中填充它。
    • 1984 .. Thnx 伙计,将在 odar 页面上处理新的视图模型,我同意你首先创建视图的观点,因为这清楚地表明了页面上真正想要的内容,但实时,你知道客户他们每天早上都会提出不同的东西,这让生活变得艰难..你根本不能指望得到确切的观点..这是一个持续的重构过程,我在想这是一个好主意为所有视图页面创建父模型,然后根据需要在其中添加不同的模型。
    • 你有没有使用多个实体模型的视图示例。或者你可以说一个包含多个实体模型的模型,它可以被视图用于智能感知
    【解决方案2】:

    您可以向ViewBag 添加另一个属性:

    ViewBag.MyStuffIsNull = (MyStuff == null);
    

    那么在你看来你可以使用这个属性来测试null:

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

    【讨论】:

    • 为什么在 if 之前使用@。
    • 但是if语句会太多..有没有更清洁的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多