【发布时间】:2014-03-13 23:52:20
【问题描述】:
在几个 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 很不熟悉,所以我不确定我可能会出错。
如果您需要查看我的存储库代码,请告诉我,但我怀疑它会对此产生影响。提前感谢您的帮助。
【问题讨论】:
-
你确实意识到 MVC 和 Web API 是两个完全不同的框架,你不能混合和匹配来自另一个的属性......对吗? API 操作不是为表单设计的,它们旨在接受 JSON 或 XML 或类似的东西;如果你想处理POST数据,你必须hack around it。
-
@Aaronaught:我隐约知道,但我对这个框架仍然非常非常陌生,所以很多事情对我来说仍然很神秘。感谢您的链接,它和其他资源一样有用。
标签: asp.net-mvc asp.net-web-api