如何验证'int?'参数,以避免控制器页面出现异常

本文关键字:控制器 异常 何验证 验证 参数 int | 更新日期: 2023-09-27 18:17:42

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

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

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

如果你导航到http://localhost/Home/Detail/3,然后控制器返回视图,它显示可用的值通过id(它是整数)从模型。

如果ID为null,则控制器将我重定向到所有值。

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

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

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

很抱歉,如果我的问题是恼人的。

如何验证'int?'参数,以避免控制器页面出现异常

可以添加路由约束,强制ID参数为有效整数

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

如果我正确理解了你的例子,那么你不能在ID到达你的Detail函数之前检查它的类型,对吗?

在这种情况下,我将改变你的"int?Id"改为"对象Id"。然后可以检查函数本身的对象类型。类似…

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

这可能有帮助

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 - 472 - b - b103 f862bfcd5dbc/