2

フィルタリングする私の2つのリンク:

@Html.ActionLink("Customer 1", "Index", new { customer = 1  })
@Html.ActionLink("Project A", "Index", new { project = "A"  })

フィルタリングを使用した私のコントローラー:

public ViewResult Index(int? customer, int? project) {
        var query = ...

        if (customer != null) {
            query = query.Where(o => o.CustomerID == customer);
        }

        if (project != null) {
            query = query.Where(o => o.ProjectID == project);
        }
        return View(query.ToList());
}

顧客またはプロジェクトのいずれかでフィルター処理できるようになりましたが、両方を同時にフィルター処理することはできません!

顧客 1 をクリックすると、url = Object?customer=1

プロジェクトAをクリックするとurl = Object?project=a

最初に顧客 1 をクリックし、次にプロジェクト A をクリックして取得できるようにしたいと考えています。url = Object?customer=1&project=a

これは可能ですか、それとも別の方法で行う必要がありますか?

ありがとう!

4

2 に答える 2

2

2番目のリンクに次のようなものを使用しないでください:

@Html.ActionLink("Project A", "Index", new { customer = ViewContext.RouteData["customer"],  project = "A"  })

このようにして、顧客パラメーターは提供されたときに渡されますが、空の場合は NULL が渡されます。

于 2012-07-05T18:53:24.097 に答える
1

これを行う正しい方法は、さまざまなパラメータを含むモデルをビューに返すことです。

モデル

public class TestModel {
   public int? Customer { get; set; }
   public int? Project { get; set; }
   public List<YourType> QueryResults { get; set; }
}

意見

@model Your.Namespace.TestModel

...

@Html.ActionLink("Project A", "Index", new { customer = Model.Customer, project = Model.Project })

コントローラ

public ViewResult Index(TestModel model) {
    var query = ...

    if (model.Customer != null) {
        query = query.Where(o => o.CustomerID == model.Customer);
    }

    if (model.Project != null) {
        query = query.Where(o => o.ProjectID == model.Project);
    }

    model.QueryResults = query.ToList();

    return View(model);
}
于 2012-07-05T18:54:33.410 に答える