如何将viewbag值与mvc 4中的模型另一个值进行比较
Posted
技术标签:
【中文标题】如何将viewbag值与mvc 4中的模型另一个值进行比较【英文标题】:How to compare viewbag value with model another value in mvc 4 【发布时间】: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
的值
我想做出选择,所以无论里面有什么都应该检查。否则未选中
【参考方案1】:
您可以更改下面给出的代码
if(ViewBag.marlid != null && Model.Permissions != null)
foreach(var permission in Model.Permissions)
if(ViewBag.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>
希望这会有所帮助。
【讨论】:
或者您可以删除所有这些废话并在视图中使用model.perm_id = db.ts_grp_perm_mapping.Select(p => p.grp_id == id).Count();
,以便您绑定到模型并且MVC旨在执行。
但是这些动作只能在控制器端完成。
我不知道你最后的评论是想说什么。我在上一条评论中显示的代码是控制器中的代码。使用它意味着可以删除所有无意义的if(ViewBag.marlid != null && Model.Permissions != null)
和if(ViewBag.marlid == permission.perm_id)
。
你当然可以,但他的问题是将 viewbag 值与另一个值进行比较以上是关于如何将viewbag值与mvc 4中的模型另一个值进行比较的主要内容,如果未能解决你的问题,请参考以下文章