通过ViewBag传递模型对象

2024-03-14

我想知道是否可以通过 ViewBag 传递模型对象。我尝试了以下代码,但不知何故在我的视图中,它仅显示模型的路径。

控制器:

public ActionResult Tempo()
{
    DateTime date1 = new DateTime(1990, 1, 1);
    Employee emp = new Employee(3, "fara", "hass", date1, 56.6m, 0);
    ViewBag.EmployeeId = emp.EmployeeID;
    ViewBag.Fname = emp.Fname;
    ViewBag.Employee = emp;
}

View:

@{
    ViewBag.Title = "Tempo";
}

@model LayoutProject.Models.Employee

<h2>Tempo</h2>
<div>
    <h4>ViewBag</h4>
    <br />
    EmployeeID: @ViewBag.EmployeeId
    <br />
    Fname: @ViewBag.Fname
    <br />
    Employee : @ViewBag.Employee
</div>

Fname 和 EmployeeId 已正确显示,但 Employee 本身未正确显示。我是否在这里遗漏了一些东西,或者根本不可能通过 ViewBag 传递模型?


最好创建一个查看模型传递到视图:

public class TempoViewModel
{
    public int EmployeeId { get; set; }
    public string FirstName { get; set; }

    public string LastName { private get; set; }
    public DateTime EmployeeStartDate { private get; set; }
    //any other properties here that make up EmployeeInformation

    public string EmployeeInformation
    { 
        get
        {
            //Format your employee information in the way you intend for the view
            return string.Format("Employee: {0}, {1}, {2}", this.FirstName, this.LastName, this.EmployeeStartDate);
        }
    }
}

然后有一个控制器创建视图模型:

public ViewResult Tempo()
{
    employee = //logic to retrieve employee information

    //map model to viewmodel
    var viewModel = new TempoViewModel()
    {
        EmployeeId = employee.EmployeeID,
        FirstName = employee.Fname,
        LastName = employee.Lname, //or set whatever properties are required to display EmployeeInformation
        EmployeeStartDate = employee.StartDate,
    };

    return View(viewModel);
}

然后在视图模型中显示view:

@model TempoViewModel

@{
    ViewBag.Title = "Tempo";
}

<h2>Tempo</h2>
<div>
    <h4>Tempo Employee Information</h4>
    <br />
    EmployeeID: @Model.EmployeeId @* Do you really want to display the employee id? *@
    <br />
    Fname: @Model.FirstName
    <br />
    Employee: @Model.EmployeeInformation
</div>

Update:

根据您当前的实现,您在致电时想要实现的目标@ViewBag.Employee在视图中,是将模型写为字符串表示形式。在当前的实现中,要将模型转换为字符串,ToString() https://msdn.microsoft.com/en-us/library/system.object.tostring(v=vs.110).aspx调用模型的方法。由于您(可能)没有覆盖ToString()方法,而是调用继承的对象实现,它写出完整的名称空间和类名(这就是我假设您说路径时的意思)。

要纠正您当前的解决方案,您可以添加一个实现ToString()到你的 Employee 类。例如:

public class Employee
{
    public Employee(int employeeId, string firstName, string lastName)
    {
        this.EmployeeId = employeeId;
        this.FName = firstName;
        this.LName = lastName;
        //etc
    }

    public int EmployeeId { get; set; }
    public string FName { get; set; }
    public string LName { get; set; }

    public override string ToString()
    {
        //Implement your required string representation of the object here
        return string.Format("EmployeeId: {0}, FName: {1}, LName: {2}", EmployeeId, FName, LName);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过ViewBag传递模型对象 的相关文章

随机推荐

  • 如何在 MySQL 中返回数据透视表输出?

    如果我有一个看起来像这样的 MySQL 表 company name action pagecount Company A PRINT 3 Company A PRINT 2 Company A PRINT 3 Company B EMAI
  • AttributeError:模块“jaxlib.xla_extension”没有属性“PmapFunction”

    有人可以帮我修复在 check not jax transformed f 中的 usr local lib python3 7 dist packages haiku src transform py in check not jax t
  • Ruby Mechanize:点击链接

    在 Mechanize on Ruby 中 我必须为我访问的每个新页面分配一个新变量 例如 page2 page1 link with text gt Continue click page3 page2 link with text gt
  • Cucumber 在一段时间后逐步停止执行

    我的一个测试会等到事件发生Then步 如果测试工作正常 则没有问题 但如果测试失败 即没有触发任何事件 那么它就会挂起 我怎样才能设置超时Cucumber I know JUnit有一个超时参数 您可以在 Test annotation h
  • 使用 Spark SQL 跳过/获取

    如何使用 Spark SQL 实现跳过 获取查询 典型的服务器端网格分页 我在网上搜索过 只能找到非常基本的示例 例如 https databricks training s3 amazonaws com data exploration
  • 使用键盘快捷键聚焦于文本字段

    我有一个 macOS Monterrey 应用程序 其中包含TextField在工具栏上 我用它来搜索我的应用程序上的文本 现在 我正在尝试添加键盘快捷键以专注于TextField 我尝试了下面的代码 添加带有快捷方式的按钮作为测试这是否可
  • 在sqlite不同数据库中触发

    我有 2 个不同的数据库 A 和 B 我需要创建一个触发器 当我在数据库 A 的表 T1 中插入任何条目时 数据库 B 的表 T2 的条目将得到已删除 请给我推荐一个方法 这不可能 在SQLite中 触发器内部的DML只能修改同一数据库的表
  • 将字符串提取函数包装在 ifelse 语句中

    下面的问题是一个延伸这个问题 https stackoverflow com questions 74135095 adding a column to the data that looks for a list of words and
  • 在现实世界应用中使用语义网络技术的示例[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 您正在开发使用 RDF OWL SPARQL 技术的 可能是商业的 产品吗 如果是这样 您能描述一下您的产品吗 O Reilly 的
  • 写入/编辑 CSV 文件(不要重写整个文件!)

    我需要替换直接在 CSV 文件上操作的客户端的某些功能 该文件用作系统的配置文件 搜索到的大多数案例都是关于从 CSV 读取到其他格式的 其他将整个 CSV 放入内存 附加专用行和更改 然后将它们写回新文件 或覆盖现有文件 我想更聪明地完成
  • Jetpack Compose 应用程序范围内的条件 TopAppBar 最佳实践

    我有一个 Android Jetpack Compose 应用程序 它使用BottomNavigation and TopAppBar可组合项 从通过打开的选项卡BottomNavigation用户可以更深入地导航到导航图 问题 The T
  • 如何在python中实现小批量梯度下降?

    我刚刚开始学习深度学习 当谈到梯度下降时 我发现自己陷入了困境 我知道如何实现批量梯度下降 我知道它是如何工作的以及小批量和随机梯度下降在理论上是如何工作的 但实在无法理解如何用代码实现 import numpy as np X np ar
  • 无法再加载 rgdal

    我在 Ubuntu 上将 GDAL 更新为 2 2 2 现在rgdal在 R 中失败 当我尝试加载时收到此消息rgdal 我也尝试更新rgdal 但没有成功 Error in get method envir home lazy load
  • 在 Android 应用程序中从 Web 获取 UTC 日期

    我想要一个UTC date对于我的 Android 应用程序来说 它是独立于设备 和用户 的 我听说过一些事情 比如从 NTP 服务器获取日期 但无法从 google 或 SO 找到任何帮助 那么任何人都可以帮我提供一些代码片段或链接吗 提
  • 正确处理文件流和二进制流以及处理文件流

    事实上 我尝试对我的代码进行防错 但最终使它看起来相当混乱 我设置了一个函数来读取某种类型的文件 我希望函数在出现问题时返回 false 如果一切正常则返回 true 我无法弄清楚如何构建一切 我有一个尝试打开文件流的初始 try catc
  • 在 ServiceProvider 中使用 Entity Framework Core 3.1 和 UseInMemoryDatabase 选项(作用域生命周期)

    我已将一个 Web 应用程序项目从 NET Core 2 1 迁移到 3 1 也将 EF Core 从 2 1 1 迁移到 3 1 0 迁移后 一些单元测试不再工作 抛出重复键数据库异常 我模拟了这个问题并意识到 EF core 带有选项U
  • 带有远程文件的 HTML5 文件 API

    我尝试了几个小时使用 HTML5 文件系统添加带有 URL 的远程文件 例如http example com doc pdf http example com doc pdf 而不是通过文件输入获得的文件 因为我希望该过程是自动的 我有多个
  • 在 eclipselink 中设置隔离级别

    我想使用 eclipse 链接设置隔离级别 我尝试了这两种方法来做到这一点 java sql Connection mgr EMF get createEntityManager tx mgr getTransaction tx begin
  • Android Studio 与 Transfuse

    我可以在我的 android 项目中成功设置 Transfuse 但是当使用 Android Studio 运行该应用程序时 它失败了 可能是因为 Manifest xml 必须为空才能让 Transfuse 处理 有人曾经把这些一起工作过
  • 通过ViewBag传递模型对象

    我想知道是否可以通过 ViewBag 传递模型对象 我尝试了以下代码 但不知何故在我的视图中 它仅显示模型的路径 控制器 public ActionResult Tempo DateTime date1 new DateTime 1990