【问题标题】:How to compare viewbag value with model another value in mvc 4如何将viewbag值与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 的值
  • 我想做出选择,所以无论里面有什么都应该检查。否则未选中

标签: asp.net-mvc entity-framework razor


【解决方案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 值与另一个值进行比较
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多