当前位置: 首页 > 知识库问答 >
问题:

同一视图中的第二个模型没有发布到控制器

姜宏放
2023-03-14

在几个SO问题的帮助下,我已经了解了如何使用元组形式在同一个视图上使用两个模型。在我的文件顶部是:

@using Project.Models;
@{
    ViewBag.Title = "Details";
    Layout = "~/Views/Shared/_Layout.cshtml";
    @model Tuple<Foo, Bar>
}

对于Foo的东西,它使用jQuery如下:

@Html.DisplayFor(tuple => tuple.Item1.ID)

而且效果很好。然而,对于我的第二个模型,它不是显示信息,而是一个提交表单。目前,我所拥有的是:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "createFoo", @action = "/api/Foo" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

    <div class="editor-field">
        @Html.TextAreaFor(tuple => tuple.Item2.Text)
        @Html.ValidationMessageFor(tuple => tuple.Item2.Text)<br />
    </div>

    <input type="submit" value="Post Response" />
}

请注意,这主要是从其他视图复制粘贴,因为我是MVC新手,它可以很好地用于其他表单。对于我的FooController,我有以下内容:

public void Post([FromBody] Foo foo)
        {
            Foo existingFoo = this.fooRepository.GetFoo(foo.ID);
            if (existingFoo != null)
            {
                // throw error
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("MESSAGE POSTING: " + foo.Text);
            }
        }

从视图提交时,收到的foo不是null(在其他测试中检查),但foo.text是空的。我尝试了很多不同的输入等,但我只是不熟悉@Html。*函数和ASP. net-MVC,总的来说,我不确定我会出错在哪里。

如果您需要查看我的存储库代码,请让我知道,但我怀疑它是否会对此产生影响。提前感谢您的帮助。

共有1个答案

仇浩旷
2023-03-14

上面的代码有两个问题:

  1. Html助手输出字段的方式以及如何将其输入到api文章中
  2. 控制器中没有您的ID。

1:输出这样的字段(@Html.TextAreaFor(tuple=

@Html.TextArea("Text", @Model.Item2.Text)

2:您的id字段不在表单中...因此不会发送。尝试使用隐藏字段:

@Html.Hidden("ID", @Model.Item1.ID)

另外,只是澄清一下,这(@Html.DisplayFor(tuple=

 类似资料:
  • CodeIgniter 的开发基于 MVC(模型-视图-控制器)设计模式。MVC 是一种 用于将应用程序的逻辑层和表现层分离出来的软件方法。在实践中,由于这种分离 所以你的页面中只包含很少的 PHP 脚本。 模型 代表你的数据结构。通常来说,模型类将包含帮助你对数据库进行增删改查的方法。 视图 是要展现给用户的信息。一个视图通常就是一个网页,但是在 CodeIgniter 中, 一个视图也可以是一

  • 我找到了一些关于这个问题的帖子,但是没有一个能解决我的问题。 说像我已经... ViewControlllerA ViewControlllerB 我试图将ViewControlllerB添加为ViewControlllerA中的子视图,但是,它抛出了一个错误,如""。 下面是代码。。。 视图控制器 ViewControllerB只是一个带有标签的简单屏幕。 视图控制器B 编辑

  • 我需要修改我的代码,使它成为一个模型-视图-控制器。因为我是一个完全的编程新手,如果我诚实的话,我会头疼。任何帮助如何做到这一点将不胜感激。 *在一个牧场上有200只忙碌的绵羊。这群羊由95只白羊、60只黑羊和45只白黑羊组成。牧羊人现在想把它们分开,这样相应的羊毛就可以按颜色剪了。帮他写一个小脚本,这样他就可以更好地点他的羊了。请使用变量、数组、数学运算符和函数实现前三点。提示:为了更好地概述,

  • 问题内容: 我开始使用Angular.JS。 我有许多共享同一控制器的视图。每个视图都是收集存储在控制器中的数据的步骤: itemSubmitter控制器: 这是第一个视图: 此方法可以实时更新“您的文本是:”段落。 但是,在加载下一个视图时,将重置为其默认值。如何使存储在控制器实例中的值在视图之间持久化? 问题答案: 更改路线时会布置控制器。这是个好习惯,因为您不应该依赖控制器在视图之间传送数据

  • 问题内容: 我没有找到有关此问题的文章,但没有一个解决我的问题。 就像我说的那样。 ViewControllerA ViewControllerB 我试图将添加为的子视图,但是它 抛出类似“ ” 的错误。 下面是代码… ViewControllerA ViewControllerB只是一个带有标签的简单屏幕。 ViewControllerB EDIT 根据用户答案的​​建议解决方案,ViewCon

  • 问题内容: 因此,我有一个带有按钮的根视图控制器,当用户按下该按钮时,将显示另一个视图控制器。第二个控制器具有一个关闭选项,该选项仅返回到根视图控制器,还有一个按钮,当用户触摸它时,该按钮将关闭当前视图控制器,以便它再次返回到根视图控制器并显示另一个按钮。转到我使用的第一个控制器: 在另一个视图控制器中,我选择仅关闭的按钮,然后执行此操作。 因此,对于需要解雇并显示另一个控制器的第二个控制器,我尝