HTTP post 上的 MVC 模型子对象为 null

2024-06-25

希望可以有人帮帮我。我是 MVC 新手,来自 winforms/console/vb6background。

抱歉,如果这个问题已经得到解答,我正在努力了解如何解决以下问题。

我有一个视图模型:

public class testvm
{
    public int id { get; set; }
    public DateTime date { get; set; }
    public student studentID { get; set; }

    public testvm() { }

    public testvm (student s)
    {
        studentID = s;
    }
}

我在将此 ViewModel 的学生子对象传递到视图之前预先填充该对象。

学生型号:

public class student
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
}

我遇到的问题是,当模型返回到创建 HTTP post 方法时,学生子对象为空。

控制器代码:

// GET: testvms/Create
public ActionResult Create(int sId)
{
    student a = db.students.Find(sId);

    testvm b = new testvm(a);

    return View(b);
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "id,date,student")] testvm testvm)
{
    if (ModelState.IsValid)
    {
        db.testvws.Add(testvm);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(testvm);
}

查看代码:

@model WebApplication2.Models.testvm

@{
ViewBag.Title = "Create";
}

<h2>Create</h2>


 @using (Html.BeginForm()) 
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>testvm</h4>
    <hr />


    @Html.HiddenFor(model => model.studentID.ID)

    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.date, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.date, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.date, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>
}

<div>
@Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

视图上的模型对象填充有学生信息。当它传递回 Create POST 控制器时,学生子对象为空!

有人可以告诉我哪里出了问题或者实现这一目标的正确方法吗?

我的申请将包含许多表格,所有表格都需要预先填写学生信息。每个学生都会有许多需要填写的表格。

提前谢谢了, 抢


对于域模型中的每个属性(在您的例子中为 testvm),您的视图上必须有一个 EditorFor 或 Input 元素(如 TextBoxFor 等)(或 HiddenFor 用于 ID 或其他非用户 ui 数据)。这可能是一个痛苦的绑定嵌套模型在 MVC 中,因为 DefaultModelBinder 可能无法绑定整个对象。但是,仅在视图上公开所需的属性会是更安全的方法,例如

@Html.HiddenFor(model => model.studentID.ID)
@Html.HiddenFor(model => model.studentID.Name)

然后在控制器端

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(testvm testvm)
{
  var originalobj=db.get //get fresh copy from data store
 originalobj.Name=testvm.Name;
//     ...other properties
//perform required operations on originalobj
}

您可以将 AutoMapper 用于此目的,如下所示

Mapper.CreateMap<testvm,testvm>();
originalobj=Mapper.Map<testvm,testvm>(testvm,originalobj);

您可以在以下位置找到有关 Automapper 的更多信息:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started https://github.com/AutoMapper/AutoMapper/wiki/Getting-started

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP post 上的 MVC 模型子对象为 null 的相关文章

  • 求 a 范围内的 pow(a^b)modN

    对于给定的b and N以及一系列a say 0 n 我需要找到ans 0 n 1 where ans i 没有a s为此pow a b modN i 我在这里搜索的是可能的重复pow a b modN对于一系列a 以减少计算时间 例子 i
  • 您使用什么工具和技术来查找死代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您使用哪些工具和技术来查找 NET 中的死代码 过去 我用 Obsolete 属性修饰方法 传递 tr
  • 指向指针的指针和指向二维数组的指针之间的区别

    如果我有一个二维数组 B 定义为 int B 2 3 1 3 5 2 4 6 Is int p B与 一样int p 3 B int f B printf d f 1 gives 5作为输出 同时printf d f 给出 1 作为答案 为
  • ASP.NET MVC - 如何实现可重用的用户控件并保持DRY?

    第一次发帖 请多多包涵 在 ASP NET MVC 中创建用户控件时 构造代码的最佳方法是什么 以便调用使用用户控件的视图的控制器不必对控件了解太多 我想知道在 ASP NET MVC 中使用用户控件时保持 DRY 的好方法 请注意 此问题
  • 多态性中基类缺少虚拟析构函数 = 资源泄漏?

    我们知道 如果要多态地使用基类 则需要将基类的析构函数指定为 virtual 否则程序中可能会出现资源泄漏 因为只会调用基类析构函数 而不会调用派生对象析构函数 我们还知道构造函数 析构函数纯粹是初始化 未初始化构造 而operator n
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • 使用私有构造函数的 C# 单元测试类?

    好吧 我刚刚收到一个作业 我必须对具有私有构造函数的类执行单元测试 现在 当所有方法也都是非静态时 我该如何在不初始化类的情况下进行单元测试 有什么方法可以对具有私有构造函数的类进行单元测试 无需反射 如果您无法将类公开 您仍然可以通过以下
  • 如果 .txt 文件不存在,则创建一个,如果存在则追加新行

    我想创建一个 txt 文件并写入它 如果该文件已经存在 我只想添加更多行 string path E AppServ Example txt if File Exists path File Create path TextWriter t
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • ASP.NET 中的 thread.sleep

    我正在为我的网站模拟彗星实时馈送协议 因此在我的控制器中我添加 while nothing new before timeout Thread Sleep 1000 但我注意到添加此功能后整个网站变慢了 调试后我得出结论 当我打电话时Thr
  • UWP - 绑定枚举差异

    我遇到了一个非常有趣的问题 假设 UWP 应用中有以下 XAML 页面内容
  • 如何在 C++ 中初始化嵌套类的构造函数

    我在初始化嵌套类构造函数时遇到问题 这是我的代码 include
  • 剥离 OLE 标头信息 (MS Access / SQL Server)

    我有一个 C 应用程序需要支持二进制数据库内容 图像等 当使用 MS Access 或 MS SQL Server 时 此数据被包装在 OLE 对象内 如何去除此 OLE 标头信息 请注意 我不能只查找特定标签的开头 因为内容可以是 png
  • Subsonic 3 ActiveRecord 嵌套选择导致 NotIn 错误?

    我有以下 Subsonic 3 0 查询 其中包含嵌套的 NotIn 查询 public List
  • 是否可以在 Eclipse 中为除 Java 之外的 Eclipse 编写插件?

    谁能帮我用c 写一个eclipse插件 weekens 和 celavek 感谢您提供的信息 我正在研究 JNI 并将尝试实现它 celavek 我们必须做什么样的主控 控制 在C 和java接口中处理是否风险更大 我的要求是在 Java
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 更快的 WinSock sendto()

    我使用的是 Windows Server 2008 我的程序是用 C 编写的 我在 while true 循环中使用 WinSock2 和 sendto 来发送数据包 代码如下 while true if c snd gt max c sn
  • 预览MouseMove 与 MouseMove

    我有相当多的 XAML 经验 但最近我注意到我的大多数同事都使用预览鼠标移动代替鼠标移动事件 我一直用鼠标移动它对我很有帮助 但我忍不住问我什么时候应该使用预览鼠标移动什么时候鼠标移动 有什么区别 各自有什么优点和缺点等等 PreviewM
  • RC4 实现与 openssl 输出不匹配

    我的目标是在 C C 中实现 RC4 流密码 并确保它产生与使用时相同的输出openssl命令 按照伪代码维基百科 https en wikipedia org wiki RC4 该实现似乎有效 因为它可以加密和解密内容 但是 加密的输出与

随机推荐

  • Java 有没有办法记录*每个*线程中断?

    我想每次都以某种方式记录Thread interrupt 被调用 记录哪个线程发出调用 及其当前堆栈 以及识别有关哪个线程被中断的信息 有没有办法做到这一点 在搜索信息时 我看到有人提到实施安全管理器的可能性 这是可以在运行时完成的事情 例
  • 无限循环:确定并打破无限循环

    你如何判断一个循环是无限循环并且会跳出它 有没有人有算法或者可以帮助我解决这个问题 Thanks 没有通用的算法可以确定程序是否处于无限循环中图灵完备 http en wikipedia org wiki Turing completene
  • 使用node+express解压POST正文

    我有一个简单的节点应用程序 应该从客户端写入指标 客户端以 json 格式发送指标 并用 python 的 zlib 模块压缩 我试图添加一个中间件来在快速 bodyParse 发生之前解压缩请求帖子 我的中间件就是express默认提供的
  • 当 AWS Websocket Api Gateway 尝试通过 Cloudfront 提供服务时出现 403 Forbidden

    我使用 AWS 的 websocket API 网关创建了一个 Websocket API 创建 api 后 我得到了像这样的端点 wss x5g9h3p2rq execute api eu central 1 amazonaws com
  • 对静态变量的未定义引用[重复]

    这个问题在这里已经有答案了 可能的重复 C 对静态类成员的未定义引用 https stackoverflow com questions 272900 c undefined reference to static class member
  • JUnit + Maven:访问 ${project.build.directory} 值

    在我的单元测试中 我想在 project build directory 内创建一个 tmp 目录 如何在单元测试中访问 project build directory 的值 我能想到的一种方法是在测试资源中提供一个经过过滤的属性文件 该文
  • TableView 单元格重用和不需要的复选标记 - 这简直要了我的命

    苹果的iOSTableView细胞重复使用简直要了我的命 我搜索 搜索 研究 但找不到好的文档或好的答案 问题是当TableView重用单元格诸如在选定单元格上设置的复选标记 单元格附件 之类的内容会在表视图中更下方的单元格中重复 我知道
  • Django - 在模板中显示当前日期和时间

    如何在 django 模板中显示当前数据和时间 尝试使用内置的 django 模板标签和过滤器 https docs djangoproject com en stable ref templates builtins now https
  • ASP.NET MVC:文件响应流?

    当我从 MVC 操作方法返回 FilePathResult 时 会发生以下哪种情况 假设结果指向的文件非常大 文件被完整地加载到服务器的内存中 然后发送到客户端 该文件以某种方式传输到客户端 其方式在任何时候都不会完全加载到服务器的内存中
  • 更改选择菜单 Jquery Mobile 的选定值

    我创建了一个表单并将用户选择的值存储在数据库中 但现在如果用户想要编辑他的表单 我需要使用以前的值重新加载表单 我正在使用 JQUERY MOBILE 我从数据库中检索了他以前的值 但现在我在加载选择菜单中的值时遇到问题 任何人都可以帮助我
  • 如何轻松地将进度指示器置于 ProgressDialog 中(当没有标题/文本传递时)

    打电话时progressDialog ProgressDialog show this null null true 通常开发人员只想显示进度指示图像 并且通常希望它位于窗口的中心 至少从常规 UI 设计的角度来看 但是图像太左了 尽管我们
  • 用于测试肥皂客户端的公共免费网络服务[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有没有公 开的SOAP 1 2 http en wikipedia org wiki SOAP protocol WSDL 2 0 http en w
  • iText7 - 如果 /DA 使用十进制字体大小,PdfFormField.setValue() 会失败

    iText 7 0 0 我有一个由 Adob e LiveCycle ES 10 创建的 PDF 它生成一个带有 DA Arial BoldMT 9 00 Tf 0 000 0 000 1 000 rg 这会导致 PdfFormField
  • 跨水平服务器计算 socket.io 用户数

    我有多个使用 redisstore 水平扩展的 socket io 服务器 我已经有效地设置了房间 并且能够成功地跨服务器广播到房间等 现在我正在尝试构建一个状态页面 但我无法弄清楚如何简单地计算跨服务器连接的用户数量所有服务器 io so
  • JSF:空嵌套数据表

    我正在基于 JSF 为 JBoss 6 1 编写自己的 JMX 控制台实现 托管bean的部分代码 ManagedBean SessionScoped public class InspectionBean implements Seria
  • 如何防止 php 的远程文件包含攻击?

    这是我在index php中的代码 include GET page 实际上我需要包含来自 url 的页面 例如 page go php 另一方面我无法过滤 page example com 对于某些情况 我还需要包含这个值 但这是一个远程
  • 什么时候应该在 SQL Server 中使用分号?

    在检查 Web 上的一些代码和 SQL Server Management Studio 生成的脚本时 我注意到某些语句以分号结尾 那么我应该什么时候使用它呢 来自 SQLServerCentral Comarticle http www
  • 为什么我会遇到握手失败 (Java SSL)

    我正在通过 HTTPS 连接到 Web 服务 我已经完成了我认为使其正常工作所需的所有操作 但最终我握手失败了 我发现 作为一个新用户 由于 垃圾邮件防护 我无法发布超过 2 个链接 非常感谢 stackoverflow 无论如何 这里有一
  • 在不循环的情况下堆叠和整形 DataFrame (pandas) 切片

    我有一个以下形式的数据框 var1 var2 var3 day 0 0 001284819 0 00138089 1 022781 1 1 0 001310201 0 001377473 1 022626 1 2 0 001330947 0
  • HTTP post 上的 MVC 模型子对象为 null

    希望可以有人帮帮我 我是 MVC 新手 来自 winforms console vb6background 抱歉 如果这个问题已经得到解答 我正在努力了解如何解决以下问题 我有一个视图模型 public class testvm publi