MVC:如何为视图模型提供一个列表并在 .cshtml 上正确输出它

2023-12-28

我所做的是以给定值作为名称来搜索 Activedirectory 用户。然后,我创建一个包含名称、电子邮件和描述值的视图模型。然后我在索引上将其显示为 .cshtml。

问题在于我的制作方式,它只发送它找到的第一个用户-(如果我从多个安德鲁中搜索安德鲁,它会找到所有用户,但会返回第一个用户。)

我想将它们添加到列表中,然后几乎做同样的事情,但当然在 .cshtml 上迭代列表并显示结果。

这是 HomeController.cs 代码——

public ActionResult Index(IndexViewModel profile)
{
    if (ModelState.IsValid)
    {
        //List<Principal> users = new List<Principal>();
        using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
        {
            UserPrincipal qbeUser = new UserPrincipal(ctx);
            qbeUser.DisplayName = profile.Name + "*";

            using (PrincipalSearcher srch = new PrincipalSearcher(qbeUser))
            {
                if(!(srch.FindAll().Count() < 0))
                {
                    foreach(var found in srch.FindAll())
                    {
                        //users.Add(found);
                        IndexViewModel returnmodel = new IndexViewModel(found);
                        return View(returnmodel);
                    }
                }                       
            }
        }
    }

    return View(profile);
}

需要注意的是

foreach(var found in srch.FindAll())
{
    //users.Add(found);
    IndexViewModel returnmodel = new IndexViewModel(found);                               
    return View(returnmodel);
}

这是 IndexViewModel.cs 的代码#

public class IndexViewModel
{
    public IndexViewModel(Principal found)
    {
        Name = found.DisplayName;
        Email = found.UserPrincipalName;
        Description = found.Description;
    }

    [Required(ErrorMessage = "Please enter a name")]
    [Display(Name = "Persons Name")]
    public string Name { get; set; }
    public string Email { get; set; }
    public string Description { get; set; }
}

这是 Index.cshtml

/ 这只是创建输入框、验证文本和提交按钮。

<div id="content">
@Html.ValidationSummary(true)
@using (Html.BeginForm("Index", "Home"))
{
    <fieldset>
        <div class="form-group col-md-12">
            @Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
            <div class="col-md-4">
                @Html.EditorFor(modelItem => Model.Name, new { htmlAttributes = new { @class = "form-control", @style = "width:280px" }, })
                @Html.ValidationMessageFor(x => x.Name)
            </div>
            <div class="col-md-2">
                <input type="submit" class="btn btn-default" value="Search">
            </div>
            <div class="col-md-3">
            </div>
        </div>
    </fieldset>
}
<br>
</div>

这里显示找到的单个结果/

<table id="historyTable" class="table">
    <thead>
        <tr>
            <th>Name</th>
            <th>Email</th>
            <th>Description</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>@Model.Name</td>
            <td>@Model.Email</td>
            <td>@Model.Description</td>
        </tr>
    </tbody>
</table>

安迪的答案是正确的,但如果您仍然遇到问题,这里是您可能想要尝试的代码。

首先创建新的用户类来保存要显示的用户的信息:

public class User
{
  public string Name { get; set; }
  public string Email { get; set; }
  public string Description { get; set; }
}

然后修改你的IndexViewModel使用这个新类:

public class IndexViewModel
{
  public List<User> FoundUsers {get; set;}

  public string Name {get; set;}

  public IndexViewModel(List<User> found)
  {
    this.FoundUsers = found;
  }
}

在您的控制器中,您正确地识别了问题区域,这将是一种解决方法:

public ActionResult Index(IndexViewModel profile)
{
    if (ModelState.IsValid)
    {
        List<User> users = new List<User>();
        using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
        {
            UserPrincipal qbeUser = new UserPrincipal(ctx);
            qbeUser.DisplayName = profile.Name + "*";

            using (PrincipalSearcher srch = new PrincipalSearcher(qbeUser))
            {
                if(!(srch.FindAll().Count() < 0))
                {
                    foreach(var found in srch.FindAll())
                    {
                        users.Add(new User() {
                          Name = found.Name,
                          Email = found.Email,
                          Description = found.Description
                        });
                    }
                }                       

                IndexViewModel returnmodel = new IndexViewModel(users);
                return View(returnmodel);
            }
        }
    }

    return View(profile);
}

因此,在控制器中,您现在正在使用以下内容填充视图模型List<User>您可以在您的视图中迭代:

<table id="historyTable" class="table">
    <thead>
        <tr>
            <th>Name</th>
            <th>Email</th>
            <th>Description</th>
        </tr>
    </thead>
    <tbody>
        @foreach(var user in Model.FoundUsers)
        {
            <tr>
                <td>@user.Name</td>
                <td>@user.Email</td>
                <td>@user.Description</td>
            </tr>
        }
    </tbody>
</table>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC:如何为视图模型提供一个列表并在 .cshtml 上正确输出它 的相关文章

  • 为什么不能使用initializer_list来初始化unique_ptr的向量? [复制]

    这个问题在这里已经有答案了 我想知道为什么initializer list 不能与unique ptr 一起使用 std vector
  • 在 ASP.NET MVC 中使用 MySQL 的 AccountController

    在 Visual Studio 中创建默认的 ASP NET MVC 项目会设置一个可以在其中注册用户的基本项目 我将如何继续更改它以使用 MySQL 服务器而不是 SQLServer 现在可以使用了 安装最新的 Connector NET
  • 有没有办法让我的程序用更少的代码运行?

    我为学校作业编写了以下代码 它编译并打印所有正确的消息 但出于我自己的好奇心 我想知道我的代码是否可以缩短并且仍然有效 我尝试了 signal 而不是 sigaction 但我听说 sigaction 比 signal 更受青睐 此外 此任
  • ASP.NET 数据集 getdataBy 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值

    你好 我有一个非常简单的网络表单 我在此表单上有一个按钮和一个网格视图 以及一个包含链接表 bill docket docket bill 等的数据集 在按钮上单击我使用以下代码 protected void button click ob
  • 通过 EUSART PIC18F45K80 打印消息

    我正在尝试向 Docklight 发送串行消息 但始终收到空值 我正在使用带有 XC8 MPLAB X 的 PIC18F45K80 我的代码中的所有内容似乎都是正确的 但我想我错了 我该如何修复它 include
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • 如何(可移植地)在 C 和 C++ 中获取 DBL_EPSILON

    我正在 Linux AS 3 上使用 GCC 3 4 并试图找出DBL EPSILON 或者至少是一个不错的近似值 我怎样才能以编程方式获取它 在 C 中是std numeric limits
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • memccpy 返回比 src 起始地址更低的内存地址

    我有一个学校项目 我必须重新编码memccpy 功能 我使用 2 个程序来检查我的代码是否正常工作 第一个是只有一个主程序的小程序 第二个程序是另一个学生开发的 可以找到here https github com yyang42 mouli
  • 二维数组的列求和

    我有一个IEnumerable
  • 使用 C# 和 .NET Core 在 AWS Cognito 用户池中进行用户管理

    如何使用 C 和 NET Core 3 x 管理 AWS Cognito 用户池中的用户 在文档中找不到有关它的任何内容 Attilio Gelosa 的原创文章 我写这篇文章是希望对其他人有帮助 我必须阅读一页又一页的文档 并从 AWS
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • 为什么 C++20 范围不只提供管道语法?

    我知道这个问题听起来很奇怪 所以这里有一些背景信息 最近 我很失望地了解到 C 20 范围内的映射缩减并不像人们所期望的那样工作 即 const double val data transform accumulate 不起作用 你必须这样
  • ASP.NET MVC 视图引擎解析顺序

    我创建了一个简单的 ASP NET MVC 1 0 版应用程序 我有一个 ProductController 它有一个操作索引 在视图中 我在Product子文件夹下创建了相应的Index aspx 然后我引用了 Spark dll 并在同
  • 验证域用户凭据

    我需要一种方法来验证 Windows 上本机 C 的用户 密码对 输入的是用户名和密码 用户可以是 DOMAIN user 格式 基本上我需要编写一个函数 如果用户 密码是有效的本地帐户 则返回 true 第1部分 如果用户 密码在给定的域
  • asp.net MVC 1.0和2.0货币模型绑定

    我想创建模型绑定功能 以便用户可以输入 等等 用于绑定到我的 ViewModel 的双精度值的货币值 我能够在 MVC 1 0 中通过创建自定义模型绑定器来执行此操作 但是自从升级到 MVC 2 0 后 此功能不再起作用 有谁有任何想法或更
  • C# 或 Windows 相当于 OS X 的 Core Data?

    我迟到了 现在才开始在 OS X Cocoa 中使用 Core Data 它令人难以置信 并且确实改变了我看待事物的方式 C 或现代 Windows 框架中是否有等效的技术 即拥有可免费保存 数据管理 删除 搜索的托管数据类型 还想知道Li
  • 您的 C++ 程序中是否仍然存在内存分配失败问题 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在为公司写一些指导方针 我需要回答一些棘手的问题 这一项是相当困难的 解决方案可以是 根本不跟踪 确保使用 new 分配对象 这会在分配失败
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执

随机推荐