如何将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 &amp;&amp; ViewBag.marlid.equals(permission)) 您正在比较不同类型的对象 - ViewBag.marlid 的类型为 intpermission 的类型为 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 =&gt; p.grp_id == id).Count();,以便您绑定到模型并且MVC旨在执行。 但是这些动作只能在控制器端完成。 我不知道你最后的评论是想说什么。我在上一条评论中显示的代码是控制器中的代码。使用它意味着可以删除所有无意义的if(ViewBag.marlid != null &amp;&amp; Model.Permissions != null)if(ViewBag.marlid == permission.perm_id) 你当然可以,但他的问题是将 viewbag 值与另一个值进行比较

以上是关于如何将viewbag值与mvc 4中的模型另一个值进行比较的主要内容,如果未能解决你的问题,请参考以下文章

带有 viewbag 的 MVC 数据集

MVC 将 ViewBag 传递给控制器

.net-mvc前后端4种传值方式

ViewData 和 ViewBag 有啥区别?

将值从部分值传递到 mvc 中的布局视图

将一个表中的多个值与另一个表中的多个值进行比较