0

私はレコード表示で少し奇妙な問題があります。ユーザーがURLにバーコード数値(int)を入力すると、そのバーコードにリンクされているレコードの詳細が表示されます。バーコードにはGUID(CodeId GUID PK)が使用されていましたが、実際にはバーコード値を追跡するための新しいIntフィールド(SerialId IDENTITY Int)が追加されました。私たちはテーブル(Codeという)のCodeIdフィールドを変更することは許されないので、これは私の奇妙な問題につながります。私は周りを見回してきました。そして、このQueryString id parameter not being usedは、私に起こっていることに対処するために私が見つけることができる最も近いものです。新しいパラメータ(IDではない)が使用されると、ViewResultは値を返すことができません。

私のルーティングは

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

モデルは、物事はGUIDだったし、ID等CodeId(テーブルのPK)にマッピングされたとき

public DbSet<Code> Codes { get; set; } 

public partial class Code 
{ 
    public System.Guid CodeId { get; set; } 
    public int SerialId { get; set; } 
    public string Title { get; set; } 
    public string BarCodeDescr { get; set; } 
    public System.DateTime CreateDate { get; set; } 
    public System.DateTime LastActivityDate { get; set; } 
} 

私のコントローラがうまく働いていた正常な完全に正常です

public ViewResult BarCode(Guid id) 
    { 
     Code code = db.Codes.Find(id); 
     return View(code); 
    } 

これ以上のようなことをしようとしています。

public ViewResult BarCode(int serialid) 
    { 
     Code code = db.Codes.Find(serialid); 
     return View(code); 
    } 

またはこの...

public ActionResult QRCode(int serialid) 
    { 
     ViewData["SerialId"] = serialid; 
     return View(db.Codes.Where(x => x.SerialId == serialid).ToList()); 
    } 

...だけですべての私の試みは、同じエラーにつながる:

The parameters dictionary contains a null entry for parameter 'serialid' 
of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult 
BarCode(Int32)' in 'MyProject.Controllers.HomeController'. An optional parameter 
must be a reference type, a nullable type, or be declared as an optional parameter. 
Parameter name: parameters 

は私が間違って何をしているのですか? CodeIdの代わりに特定のSerialIdを検索することに基づいて、私の見解がレコードを返すのは理想的ではありませんが、それは可能でしょうか?

答えて

1

オプションのパラメータを使用してみますか?

public ViewResult BarCode(int serialid = 0) 
    { 
     Code code = db.Codes.Find(serialid); 
     return View(code); 
    } 
+0

ええと、それは私にとっては新しい考えです。 {"主キー値の型がエンティティで定義された型と一致しませんでした。詳細については内部例外を参照してください。\ r \ nパラメータ名:keyValues"} { "}} ...これは、引数の型 'Edm.Guid'と 'Edm.Int32'はこの操作では互換性がありません。WHERE述語の近く、1行目、70桁です。"} ...これはまだビューを返すことを試みているようですその値はCodeId/GUIDに反することになります。 –

+0

データベースの列タイプを再度確認し、.edmxファイルでEntity Frameworkを使用している場合は、リフレッシュしようとしています。 –

+0

いいえ、私は二重チェックして、間違いなくIDが挿入されたSerialId(INT)です。 .edmxがリフレッシュされます。変更はありません。私はその後、Public ViewResult BarCode(int?serialid = 0)を? intの後に、正しく識別されたPK値(SerialIdはPKではない、CodeIdである)に関する新しいエラーを受け取った。{"プライマリキー値の型がエンティティで定義された型と一致しなかった。詳細については\ r \ nパラメータ名:keyValues "}内部例外は同じです:Edm.GuidとEdm.Int32は互換性がありません。私のViewResultはPKをINTに入れようとしていますか? –

関連する問題