【问题标题】:ASP MVC 3 controller action not receiving all the parametersASP MVC 3 控制器动作未接收所有参数
【发布时间】:2012-08-16 14:26:16
【问题描述】:

所以我有类似这样的看法:

...
<input type="text" id="FieldOne" />
<input type="text" id="FieldTwo" />
<input type="text" id="FieldThree" />
...

模仿这个类:

public class Foo{
    public string FieldOne { get; set; }
    public string FieldTwo { get; set; }
    public string FieldThree { get; set; }
}

以及对应控制器中的一个动作:

[HttpPost]
public ActionResult View(Foo param)
{
   ...
}

当我提交表单时,Post 操作中的参数“param”会正确复制与该类匹配的所有字段的值,除了其中一个字段(例如 FieldOne)。这些输入由 Html.TextboxFor() 生成。

这是一个特殊的问题还是我可能忘记了什么?

【问题讨论】:

  • 你能给我们看看你的真实视图吗?您的示例中的问题是您没有使用 name 属性
  • 您可以使用 Fiddler 或其他一些 HTTP 调试工具来查看提交表单时发布的数据。我同意 Andre 的观点,至少在示例中,可能的问题是您没有在输入元素上设置名称,而只是在 id 上设置。您可以在视图中使用 html 帮助类,而不是手动写出 HTML,这可能会设置输入的名称。见:w3schools.com/aspnet/mvc_htmlhelpers.asp
  • 我也面临同样的问题,当我尝试将input type='textbox' 值传递给controller 时,最后一个参数在控制器中始终显示为空。

标签: c# asp.net-mvc razor


【解决方案1】:

您的输入框无效。它们应该如下所示:

// Start Form
<input type="text" id="FieldOne" name="FieldOne" />
<input type="text" id="FieldTwo" name="FieldTwo" />
<input type="text" id="FieldThree" name="FieldThree" />
// End Form

话虽如此,您有什么理由不使用 Html Helpers 吗?鉴于您的模型,最好将您的表单编写如下:

// Start Form
@Html.TextBoxFor(m => m.FieldOne)
@Html.TextBoxFor(m => m.FieldTwo)
@Html.TextBoxFor(m => m.FieldThree)
// End Form

【讨论】:

  • 好的,它是用 TextBoxFor 完成的。我在倒数第三段的最后一句中是这么说的。我刚刚发现我没有得到结果的原因是因为我为该字段创建了 another 文本框,因此 VS 不知道要发回哪个文本框。尽管如此,你说的是真的,既然你是第一个回答的,而且你说的对你有帮助,我会给你加分。
  • @Heathclif 错过了您对 textboxfor 的评论。很高兴您找到了原因。
猜你喜欢
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 2011-08-05
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多