如何验证'int?' C#中的参数可以避免控制器页面中的异常?

时间:2011-12-14 07:03:39

标签: c# asp.net-mvc

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

在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仅适用于双数据类型。

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

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:1)

如果我正确理解了您的示例,那么在进入详细信息功能之前无法检查ID的类型,是否正确?

在这种情况下,我会将“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();
        }
    }

答案 2 :(得分:0)

这可能会有所帮助

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/