非Ajax方式下HTML数组输入传参至控制器及代码正确性验证
问题解答
结论:你给出的控制器方法参数写法不完全正确,存在两处问题:
- 冗余参数不匹配:你的HTML代码里没有名为
ingredientUnit[]的输入控件,但控制器里却声明了string[] ingredientUnit。表单提交时这个参数会被绑定为null,虽不报错,但属于多余参数,要么移除它,要么补充对应的HTML输入框。 - 类型匹配需注意:
ingredientQty[]是数字输入框,用int[] ingredientQty绑定是合理的,但如果用户输入小数,模型绑定会失败,要在前端或后端加验证逻辑。
另外,正确的部分是:ingredientName[]对应string[] ingredientName、ingredientQty[]对应int[] ingredientQty的写法是没问题的,ASP.NET MVC的模型绑定会自动把表单里的数组字段绑定到控制器的数组参数上,普通POST提交(非Ajax)完全支持这种方式。
如果不需要ingredientUnit,修正后的控制器方法参数应该是:
public ActionResult UploadRecipe(Recipe recipe, string ingcount, string moodid, string[] ingredientName, int[] ingredientQty) { // 业务逻辑 }
内容的提问来源于stack exchange,提问作者Cypher
相关产品推荐
相关产品推荐

