0

エラー

パラメーター ディクショナリには、'sportingbiz.Controllers.PredictionController' のメソッド 'System.Web.Mvc.ActionResult Predict(Int64)' の null 非許容型 'System.Int64' のパラメーター 'UserId' の null エントリが含まれています。オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメータ名: パラメータ

これは動作しません。上記のエラーをスローします

http://mysite/User/Profile/15

これは機能します

http://mysite/User/Profile/?UserID=15

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

public ActionResult Profile(long UserID)
{

}

パラメータ名を変更するIdと機能します。Idルート集(Global.asax)に指定されていたからだと思います。変更せずにMVCにUserIdマップする必要があることを伝えることは可能ですか?IdGlobal.asax

4

3 に答える 3

5

これを達成する唯一の方法は(カスタムModelBindersに入らずに)、次のことです。

  1. パラメータをnull許容にする
  2. RouteDataコレクションを使用して、事後にプロパティを設定します。

 public ActionResult Profile(long? UserID)
 {
     UserID = UserID ?? long.Parse((string)RouteData.Values["id"]);
 }
于 2012-09-01T09:35:34.817 に答える
0

既に投稿されたコードが機能するはずなので、自分のバージョンをテストしたところ、機能しました。

public ActionResult Profile(long? UserID)
        {
            if (UserID.HasValue)
            {

            }
            else if (this.RouteData.Values["id"] != null)
            {
                long tempValue = 0;
                if (long.TryParse(this.RouteData.Values["id"].ToString(), out tempValue))
                {
                    UserID = tempValue;
                }
            }

            return View();
        }

それが役に立てば幸い。

于 2012-09-02T15:58:05.060 に答える
0

私は常にコントローラーの id パラメータを Id のような一般的なものにします。そうすれば、さまざまな ID タイプに一致するために多くのルートを作成する必要はありません。

ID に null 許容の文字列を使用していない場合は、long id = 0 などのデフォルト値を指定し、ゼロ値をデフォルトの開始シーケンスとして処理できます。

たとえば、ページングメソッドでは、ゼロに設定して最初のページにパラメーターを必要としないようにすることができますが、その後に渡すとそのページ番号などが要求されます。

于 2012-09-02T12:43:31.150 に答える