我通过控制器将一些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,因此我收到错误:无法执行运行时绑定空引用。任何建议或替代方案都将受到高度赞赏。
答案 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清洁并免于代码汤 - 这就是你现在所拥有的。