在几个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不为空(在其他测试中检查),但foo.text为空。我已经尝试了很多不同的输入等等,但我对@ Html。*函数和ASP.net-MVC一般都不熟悉,我不知道我可以去哪里错。
如果你需要查看我的存储库代码让我知道,但我怀疑它会对此产生影响。提前感谢您的帮助。
答案 0 :(得分:2)
我可以在上面的代码中看到两个问题:
Html
助手将输出您的字段的方式以及如何将其输入您的api帖子 1:输出这样的字段(@Html.TextAreaFor(tuple => tuple.Item2.Text)
)会为该字段指定名称"Item2.Text"
。这是一个问题,因为这是在帖子上传递的内容。您将获得Item2.Text:dfsdsgdfg
的表单数据。当您的API控制器尝试绑定时,这将不匹配。因此,请尝试使用集名称输出文本字段:
@Html.TextArea("Text", @Model.Item2.Text)
2:您的Id字段不在表单中......因此不会发送。尝试使用隐藏字段:
@Html.Hidden("ID", @Model.Item1.ID)
另外,只是澄清一下,这个(@Html.DisplayFor(tuple => tuple.Item1.ID)
)不是jQuery。