在控制器操作中有一个默认参数,期望多个

时间:2017-06-06 19:43:55

标签: c# asp.net-mvc

我的控制器操作需要多个参数,但在POST上只能有一个参数可以为空。它是十进制的类型。根据默认路由的research I've done,它看起来仅限于为期望单个参数的操作设置默认值。

这是我得到的响应消息:

MVC:参数字典包含非可空类型'System.Decimal'的参数'z'的空条目

以下是BarController.cs中的方法签名:

[HttpPost]
public PartialViewResult Bar(int x, string y, decimal z) {*/Etc*/}

这是我尝试但未成功的路线(RouteConfig.cs):

routes.MapRoute(name: "Bar", url: "Foo/Bar/z",
defaults: new {controller = "Foo", action = "Bar", z= 0 });

我的请求正文包含x和z的值,但y 可以可以为空。

如何重构以使z可以为空?除了字面上使它成为可以为零的十进制类型。我已经有了订阅Decimal类型的算法,而不是可以为空的变体。

3 个答案:

答案 0 :(得分:0)

听起来你试图将 null 作为int32传递,这是行不通的。在c#int32中是值类型,而不是引用。你可以使用可空的int32,但是阅读你的问题听起来好像你期待的东西不同于int32。

添加一些代码,您将获得帮助!

答案 1 :(得分:0)

使用像decimal这样的可以为null的参数?还是int?在你的行动中。

答案 2 :(得分:0)

您也可以将“int”或“decimal”参数设为Nullable。

public PartialViewResult Bar(string y, decimal? z, int? x) {*/Etc*/}

请注意,在这种情况下,您必须验证输入,以检查“x”或“y”是否具有值。在Check an integer value is Null in c#中,您可以找到一些验证Nullable整数变量的方法。可以使用相同的方法来检查decimal参数是否为空。