2012-04-24 89 views
0

我在运行时遇到了id为空的错误。这是我所有的部分。“参数字典包含非空参数的非空类型”?

这里是我的DAL,ProjectDB

public static List<Product> IsOrganic(int lotid) 
    { 
     using (var db = new ProductDB()) 
     { //Selects from database in SQL what we need 
      //IsDamaged is Organic, and bool for true/false for food 
      DbCommand cmd = db.GetSqlStringCommand("SELECT * FROM PRODUCTS WHERE ORGANIC = 1"); 


      return FillList(db.ExecuteDataSet(cmd)); 
     } 
    } 

这里是我的经理

public List<Product> IsOrganic(int lotid) 
    { 


     return ProductDB.IsOrganic(lotid); 


    } 

这里是我的控制器

public ActionResult Organic(int id)//Store/Organic 
    { 
     ProductManager mgr = new ProductManager(); 

     var list = mgr.IsOrganic(id); 

     return View(list); 
    } 

而且,这里是我的全球

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 
+0

如果您无法传入参数,那么您会得到该错误。 – 2012-04-24 21:15:06

+0

错误描述了问题所在。你的请求和路由设置是什么样的? – asawyer 2012-04-24 21:15:36

+2

当框架尝试调用您的控制器方法时,该错误发生在较高级别。执行没有达到你展示的代码。 – GSerg 2012-04-24 21:16:53

回答

3

如果您正在使用C#4,对于可选参数使用默认值

public ActionResult Organic(int id = 0)//Store/Organic 
{ 
    ProductManager mgr = new ProductManager(); 

    var list = mgr.IsOrganic(id); 

    return View(list); 
} 

如果只有C#3,使用默认值属性为可选参数

public ActionResult Organic(
     [System.ComponentModel.DefaultValue(0)] int id) //Store/Organic 
{ 
    ProductManager mgr = new ProductManager(); 

    var list = mgr.IsOrganic(id); 

    return View(list); 
} 

但我不知道为什么你在呼唤有机的方式,那就是没有参数。如果您使用的自定义名称

http://localhost/Store/Organic?id=7

如果你想测试,如果StoreController的有机行动工作,在网址输入:

http://localhost/Store/Organic/7

或本您的StoreController的有机行为的参数ID,例如有机ID:

public ActionResult Organic(int organicId = 0) //Store/Organic?organicId=7 
{ 
    ProductManager mgr = new ProductManager(); 

    var list = mgr.IsOrganic(id); 

    return View(list); 
} 

,这个网址将无法工作:http://localhost/Store/Organic/7

,不会有运行时错误,但organicId值不会被传递的值,因此总是会有0

的值,您必须使用此代替:http://localhost/Store/Organic?organicId=7

顺便说一句,运行时错误从哪里来?点击链接?尝试将鼠标悬停在该链接上并查看浏览器的状态栏,yourl URL必须符合以下内容:http://localhost/Store/Organic/7http://localhost/Store/Organic?id=7

如果它看起来并不这样一来,你的ActionLink的改成这样:

@Html.ActionLink("Store", "Organic", new {id = 7})

,或者如果您使用的是普通的HTML:

<a href="Store/Organic/7"> 

或者这样:

<a href="Store/Organic?id=7"> 
+0

感谢您的回复。我做了一些事情,我可能已经修复了这个ID错误。当我运行它时,我正在执行/存储/有机尝试为文件C:\ Users \ MYNAE.UNI \ Dropbox \ WebDev2 \ Project(Final)\ NewProj3 \ NewProj3 \ App_Data附加一个自动命名的数据库\ StoreDB.sdf失败。具有相同名称的数据库存在,或指定的文件无法打开,或位于UNC共享上。这是在我的AbstractDatabase.cs – PolarisUser 2012-04-25 01:34:20

+0

但数据库文件在该位置,我加倍checked = \ – PolarisUser 2012-04-25 01:36:23

+0

“感谢您的答复。我做了一些事情,我**可能**已修复该ID错误。”这个问题不应该是[可重现的],所以你应该知道如何修复它当他/她遇到同样的错误?你可以在单独的问题上发布你的数据库问题,它也可能在http:// stackoverflow的http://serverfault.com/或http://dba.stackexchange.com/这两个姊妹站点被解决的可能性更高。 com – 2012-04-25 01:49:12

相关问题