【问题标题】:How to verify an 'int?' parameter in C# to avoid exceptions in controller page?如何验证'int? C# 中的参数以避免控制器页面中的异常?
【发布时间】:2013-05-08 04:14:41
【问题描述】:

我想创建一个验证不同输入的类。

在 Controller 中,我有一个简单的 ActionResult 方法类型。

 public ActionResult Detail( int? id ) {
           ViewData["value"] = _something.GetValueById( id );
           return View();
        }

如果您导航到http://localhost/Home/Detail/3,则控制器会返回视图,在该视图中,它通过模型的 id(它是整数)显示可用值。

如果 ID 为空,那么控制器会将我重定向到所有值。

如果您将 ID 路由(如 http://localhost/Home/Detail/3fx)更改为不同的数据类型,则控制器将返回红色页面。 (有例外)

我想检查 ID 是否为 int 以避免出现红页错误(带有异常列表)。

我看到isNaN只适用于double数据类型。

对不起,如果我的问题很烦人。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您可以添加route constraint 以强制ID 参数为有效整数。

    routes.MapRoute(
        "MyRoute",
        "Home/Details/{id}",
        new {controller="Home", action="Details",  id = UrlParameter.Optional},
        new {id = @"\d+" }
    );
    

    【讨论】:

    • 虽然这会跳过他的路线,但它会返回一个资源未找到错误,不是吗?他不能通过将Detail( int? id ) 更改为Detail( string id ) 并在那里进行检查来解决它吗?
    • 如果你写:abcde 作为 ID 路由会发生什么?会抛出异常吗?我想如果你写http://localhost/Home/Detail/apple 那么页面将返回与ID不存在的页面相同的页面。
    • @DMoses:我写了一个 javascript 函数,它为 Detail 函数提供一个整数值
    • @DMoses is not resource not found 更正确的方法在这里,只是一个疑问?
    • 如果我理解你的话,你想在将字符串作为参数传递时将ID 设置为空?这是默认行为(未应用约束)。
    【解决方案2】:

    如果我正确理解了您的示例,那么您无法在 ID 到达您的 Detail 函数之前检查它的类型,对吗?

    在这种情况下,我会将您的“int?id”更改为“object id”。然后您可以检查函数本身中的对象类型。比如……

        public ActionResult Detail(object id)
        {
            int myID;
            if (int.TryParse(id.ToString(), out myID))
            {
                ViewData["value"] = _discipline.GetValueById(id);
                return View();
            }
        }
    

    【讨论】:

      【解决方案3】:

      这可能会有所帮助

      string Str = textBox1.Text.Trim();
      double Num;
      bool isNum = double.TryParse(Str, out Num);
      if (isNum)
          MessageBox.Show(Num.ToString());
      else
          MessageBox.Show("Invalid number");
      

      检查此链接 http://social.msdn.microsoft.com/forums/en-US/winforms/thread/84990ad2-5046-472b-b103-f862bfcd5dbc/

      【讨论】:

      • 我没有字符串。仅限int?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      相关资源
      最近更新 更多