0

実行すると、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
        );
4

1 に答える 1

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);
}

しかし、なぜそのようにOrganicメソッドを呼び出しているのか、つまりパラメーターなしであるのか疑問に思います。

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);
}

、このURLは機能しません:http:// localhost / Store / Organic / 7

、実行時エラーは発生しませんが、organicId値には値が渡されないため、値は常に0になります。

、代わりにこれを使用する必要があります:http:// localhost / Store / Organic?organicId = 7

ちなみに、ランタイムエラーはどこから来るのですか?リンクをクリックすると?そのリンクにカーソルを合わせてブラウザのステータスバーを確認してください。URLは次のURLに準拠している必要があります: 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">
于 2012-04-25T00:42:05.657 に答える