【发布时间】:2016-02-08 05:27:52
【问题描述】:
我正在尝试将视图包从操作方法发送到视图。当第一页加载时,viewbag 值将为空。当我调用 CheckPermissions 操作方法时,viewbag 获得了一些值,它将返回与 viewbag 包含一些值时相同的视图,现在我想将 viewbag 值与另一个值进行比较。我试过但出现以下错误。无法对空引用执行运行时绑定。 这是我的索引视图代码。
@model c3card.Models.GroupPermissionVM
@{
ViewBag.Title = "Index";
}
@using (Html.BeginForm())
{
@Html.LabelFor(m=>m.GroupID)
@Html.DropDownListFor(m => m.GroupID, Model.GroupList, "Please select", new { id = "ddlgrp" })
foreach(var permission in Model.Permissions)
{
if (ViewBag.marlid.equals(permission))
{
<label>
@Html.RadioButtonFor(m => m.perm_id, permission.perm_id, new {@checked="true"})
<span>@permission.perm_levelname</span>
</label>
}
else
{
<label>
@Html.RadioButtonFor(m => m.perm_id, permission.perm_id)
<span>@permission.perm_levelname</span>
</label>
}
}
这是我的操作方法
public ActionResult CheckPermissions(int id)
{
var groups = db.tm_grp_group.Where(a => a.grp_isactive == true);
var permissions = db.tm_perm_level;
GroupPermissionVM model = new GroupPermissionVM
{
marlid=db.ts_grp_perm_mapping.Select(p=>p.grp_id==id).Count(),
GroupList = new SelectList(groups, "grp_id", "grp_name"),
Permissions = permissions.Select(p => new PermissionVM
{
perm_id = p.perm_id,
perm_levelname = p.perm_levelname
})
};
ViewBag.marlid = db.ts_grp_perm_mapping.Select(p => p.grp_id == id).Count();
return View("Index",model);
}
有什么建议为什么我无法在 if 条件下比较值?提前致谢。如果 (ViewBag.marlid.equals(permission)) 这条线导致我出错 我编辑如下
foreach(var permission in Model.Permissions)
{
if(Model.marlid==permission.perm_id)
{
<label>
@Html.RadioButtonFor(m => m.perm_id, permission.perm_id,new { @checked = true } )@Model.marlid.ToString()
<span>@permission.perm_levelname</span>
</label>
}
【问题讨论】:
-
if (ViewBag.marlid != null && ViewBag.marlid.equals(permission)) -
您正在比较不同类型的对象 -
ViewBag.marlid的类型为int,permission的类型为PermissionVM -
我现在编辑它说'int'不包含'equals'的定义
-
但是说真的,你到底为什么要那样做。如果
perm_id的值等于permission.perm_id的值,那么它将被选中 - 根本不需要此代码(并且它搞砸了模型绑定)。在将模型传递给视图之前,只需在控制器中设置属性perm_id的值 -
我想做出选择,所以无论里面有什么都应该检查。否则未选中
标签: asp.net-mvc entity-framework razor