【问题标题】:Having a single default argument in a controller action expecting multiple在控制器动作中有一个默认参数,需要多个
【发布时间】:2017-06-08 00:16:11
【问题描述】:

我的控制器动作需要多个参数,但在 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 类型的算法,而不是可为空的变体。

【问题讨论】:

  • 您能在此处添加代码以使问题更清晰
  • 请分享您的控制器方法代码以及您在哪里调用它
  • @hasan 我已经更新了代码-谢谢。

标签: c# asp.net-mvc


【解决方案1】:

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

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

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

【讨论】:

  • 抱歉,我粘贴了错误的服务器错误信息。它抱怨 System.Decimal,而不是 Int32-(见更新)
  • 解决方法类似。您必须执行相同的操作(使参数为 Nullable),但使用小数参数。
  • 编辑答案以支持 int 和 decimal 可空参数。
【解决方案2】:

听起来您尝试将 null 作为 int32 传递,但这是行不通的。在 c# 中,int32 是值类型,而不是引用。您可以使用可为空的 int32,但在阅读您的问题时,听起来您所期待的与 int32 不同。

添加一些代码,你会得到帮助!

【讨论】:

  • 谢谢-我正在处理十进制类型。添加了更多代码。
【解决方案3】:

使用像十进制这样的可空参数?还是整数?在你的行动中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多