0

たくさんの質問とインターネットデータを確認した後、MVC3アプリケーションからURLパラメータを正しく取得するという私の問題を解決しました。コーディングに問題はなく、ルーティングに問題があったということです(私はルーティングがあまり得意ではありません...)。これが現在の問題です。

http://localhost:51561/Report/Details/1

これは、私のアプリケーションがレポートの詳細を表示する方法です。これは良いことです。しかし、このようにすると、URLパラメータから値を取得できなくなります。

Request.QueryString["id"]

しかし、手動でURLを入力すると、機能しhttp://localhost:51561/Report/Details?id=1ます...最初のURLタイプが好きですが、そこからパラメーターを取得する方法がわかりません...

助けてください...

アップデート:

私のコントローラーのアクション:

public ViewResult Details(int id)
    {
        Report report = db.Reports.Find(id);
        ViewBag.TestID = Request.QueryString["id"].ToString();
        return View(report);
    }

    public ActionResult Show(int id)
    {
        Report report = db.Reports.Find(id);
        var imageData = report.Image;
        return (File(imageData, "image/jpg"));
    }

私の見解:

<div class="display-label">Picture</div>
<div class="display-field">
   <img alt="image" src="<%=Url.Action("Show", "Report", new { id = ViewBag.TestID })%>" width="200px" />
</div>
4

2 に答える 2

1

Request.QueryString["id"]MVCで使用することは想定されていません

アクションにidパラメーターを追加するだけです。ReportController.Details

public ActionResult Details (int id)

上記は、Global.asaxにデフォルトルートが設定されていることを前提としています。

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
于 2012-06-25T16:32:16.360 に答える
1

まず第一に、あなたはRequest.QueryStringあなたのアプリケーションで使うべきではありません。それとは別に、最初のURLにはクエリ文字列がないため、アクセスできません(msdnのこの記事Request.QueryStringも読んでください)。

また、ここにあるASP.NETMVC3の基本的なチュートリアルを実行することをお勧めします。あなたの質問のような多くのことがそこで徹底的に説明されています。

ここで質問に答えるために、最初のURLの例では1、URL内はアクション(詳細アクション)のパラメーターです。このパラメーターをメソッド(アクション)に追加する必要があります。

public ActionResult Details(int id)

更新:あなたは明らかに正しいアクション(メソッド)宣言を持っています。これで、パラメータを使用できますid。したがってRequest.QueryString["id"]、変数(パラメータ)だけで変更しますid

public ViewResult Details(int id)
{
    Report report = db.Reports.Find(id);
    ViewBag.TestID = id;
    return View(report);
}

IDを適用する必要はありませToString()ん。必要のないときに作成しないでください(後で必要になる可能性があります)。ViewBag元のタイプとしてそのまま入れてください。

あなたのShow()方法は良いです:)。idこれで、必要に応じてパラメーターが作成されました。(かっこが多すぎないようにしてください。かっこが乱雑になり、はっきりと見えます。)

public ActionResult Show(int id)
{
    Report report = db.Reports.Find(id);
    var imageData = report.Image;
    return File(imageData, "image/jpg");
}
于 2012-06-25T16:36:20.483 に答える