25

ASP.NetMVCを使用しています。これがCourseという名前のコントローラーからの私のコードスニペットです:

public ActionResult List(int id)
{
    var viewmodel.ShowUrl = Url.Action("Show", "Course");


    ...
}

public ActionResult Show(int id)
{
  ...
}

viewmodel.ShowUrlは、「id」パラメーターの値が何であれ、それを取得します。したがって、viewmodel.ShowUrlは "/ Course / Show / 151"になります(idの値は151です)。ユーザーの操作に基づいて、クライアントでid部分を設定できるようにしたい。viewmodel.ShowUrlの値を「/Course/Show」にします。

これは私にはバグのようです。Url.Actionにid値を含めるように指示しているのではありません。それはそれ自身でそれをしている。id値を設定したい場合は、次のようにします。

var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});

では、MVCがid値を追加しないようにするにはどうすればよいでしょうか?viewmodel.ShowUrlを"/Course / Show"にハードコーディングできますが、それは厄介な解決策のようです。ありがとう。

4

3 に答える 3

32

同じ問題が発生したので、空の文字列を使用することもできます。

@Url.Action("Show", "Course", new { id = "" })
于 2014-07-09T06:59:02.450 に答える
15

私はこれが古いことを知っています、しかし私はこれを最初に見つけました、しかしこれらの解決策のどれも好きではなかったので、私は探し続けてそしてhttps://stackoverflow.com/a/19110921/1130636を見つけました。

UrlParameter.Optionalこの問題を解決するために使用できます

Url.Action("Show", "Course", new { id = UrlParameter.Optional })

于 2015-03-13T17:01:42.463 に答える
10

私はあなたのルーティングで推測しています、あなたはidがオプションのパラメータであることを指定していません。サンプルプロジェクトのデフォルトルートは次のとおりです。

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

が含まれていることに注意してくださいid = UrlParameter.Optional。それがないと、IDが必須であると見なされるため、説明している動作が得られます。

ちなみに、Showアクションに常にIDが含まれているとは限らない場合は、null許容にするか、デフォルトを提供する必要があります。

public ActionResult Show(int? id)
public ActionResult Show(int id = 0)

そうしないと、idパラメータなしでURLをロードしようとしたときにエラーが発生します。

于 2012-04-18T00:07:28.240 に答える