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

Asp.net mvc 如何在asp.net mvc 2中执行启用/取消分配或隐藏/取消隐藏,asp.net-mvc,asp.net-mvc-2,view,viewdata,Asp.net Mvc,Asp.net Mvc 2,View,Viewdata,我正在通过控制器将一些viewdata和view bag传递给view,下面是代码片段: IProductRepository prodResp = new ProductRepository(); Product getGarages = prodResp.GetDetailsForGarages((int)Session["EventID"]); Product getHelmets = prodResp.GetDetailsForHelmet((int)Se

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

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);
    }
看法


此事件的第二个驱动程序可用性
第二河流:
第二价格:

可用于本次活动的头盔数量

头盔数量:
单价:

可用于此活动的车库数量

车库数量:
单价: 此事件的第二个驱动程序可用性
自由的

可用于本次活动的头盔数量

头盔数量:
单价:

可用于此活动的车库数量

车库数量:
单价:

我遇到的问题是我无法隐藏或取消隐藏Viewbag。如果Viewbag.value的值为null,则受尊重的Viewbag.value应隐藏在视图中,因此我遇到错误:无法对null引用执行运行时绑定。任何建议或替代方案都将受到thanx的高度赞赏。

您可以在
视图包中添加另一个属性:

ViewBag.MyStuffIsNull = (MyStuff == null);
然后在您的视图中,您可以使用此属性测试空值:

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

//工作
任何建议或替代方案都将受到thanx的高度赞赏

您考虑过使用视图模型吗

ViewBag在处理单个字段等不保证“模型”的情况下很好,但是您有很多代码,我看到了诸如头盔和车库之类的名词,所以您应该使用ViewModel

然后您可以使用:

<%: Html.DisplayFor(model => model.SecondDriver) %>
model.SecondDriver)%%>
如果
SecondDriver
为空,则不会呈现任何内容

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


我不知道你的情况,但是当我进行MVC开发时,我的第一个目标是保持我的视图干净,不受代码汤的影响,这就是你目前所拥有的。

为什么你要使用@before if。但是if语句太多了。有没有更干净的解决方案呢?我想你是对的,问题是我正在使用2-3个表填充这个视图。该视图的视图模型并不包含其他模型的所有实体属性,尽管它们通过外键相互关联,但简洁的解决方案可能类似于构建父模型并在其中附加子模型。。我猜是这样的。我对使用用户控件的隐藏和启用属性的webforms很满意,但与mvc的斗争可能是我的技能有限,或者你可以说我接触过mvc,但发现很难解决基本问题。@Muhammad-你会做到的,别担心,伙计。WebForms毒害了我们所有人,轶事是阅读、学习、编码和探索。您应该创建包含视图所需的所有内容的视图模型,包括父/子视图模型,例如嵌套视图模型。我们的团队通常首先用硬编码的HTML对视图进行编码,然后我们知道要创建什么ViewModel,所以我们创建它,然后使用控制器从模型中填充它。1984。。Thnx mate将在odar页面上开发新的视图模型,我想首先了解您创建视图的观点,因为这会让您清楚页面上真正想要的是什么,但在实时情况下,您知道客户他们每天早上都会提出不同的内容,这让生活很艰难。。您根本不能期望获得d xact视图。。这是一个持续的重构过程,我在想的是,为所有视图页面创建父模型,然后根据需求在其中添加不同的模型是一个好主意。你有没有使用多实体模型的视图示例。或者,您可以说一个模型中包含多个实体模型,该模型可由视图用于intellisense
<%: Html.DisplayFor(model => model.SecondDriver) %>