“参数字典包含非可空类型参数的null”?

时间:2012-04-24 21:11:42

标签: c# asp.net-mvc

运行时,我的id收到null错误。这是我的所有部分。

这是我的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
        );

1 个答案:

答案 0 :(得分: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,请对可选参数

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

    var list = mgr.IsOrganic(id);

    return View(list);
}

但我想知道为什么你这样调用有机方法,就是没有参数。

如果您想测试StoreController的Organic操作是否有效,请在url中输入:

http://localhost/Store/Organic/7

或者这个:

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

如果您使用自定义名称作为StoreController的Organic操作的参数ID,请说organicId:

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

顺便说一下,运行时错误来自哪里?点击链接后?尝试将鼠标悬停在该链接上并查看浏览器的状态栏,您的网址必须符合以下条件:http://localhost/Store/Organic/7或此http://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">