2012-08-15 79 views
1

所以我有一个类似的视图:ASP MVC 3控制器动作不接收所有的参数

... 
<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()生成。

这是一个特殊的问题还是有我可能会忘记的东西?

+0

你能告诉我们你真正的观点吗?你的例子中的问题是你没有使用'name'属性 – 2012-08-15 18:41:29

+0

你可以使用Fiddler或其他一些HTTP调试工具来查看提交表单时要发布的数据。我同意安德烈的观点,至少在示例中,可能的问题是您没有在输入元素上设置名称,而只是在id上设置名称。您可以在视图中使用html帮助类,而不用手工编写HTML,以便可以设置输入的名称。请参阅:http://www.w3schools.com/aspnet/mvc_htmlhelpers.asp – 2012-08-15 18:46:25

回答

6

您的输入框无效。他们应该看起来如下:

// 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 
+0

好吧,它是用TextBoxFor完成的。我在最后3段的最后一句中这样说。我刚刚发现,我没有得到任何结果的原因是因为我为该字段创建了_another_ textbox,因此VS无法知道要发送哪一个。但是,你所说的是真实的,既然你是第一个回答,而你说的话可能会有所帮助,我会给你的观点。 – Heathcliff 2012-08-15 19:02:16

+0

@Heathclif错过了你的评论重新编写的文本框。很高兴你找到了原因。 – Jesse 2012-08-15 20:07:53