レコードの表示に関して少し奇妙な問題があります。ユーザーがバーコード数値(int)値をURLに入力すると、そのバーコードにリンクされているレコードの詳細が表示されるはずです。以前は、GUID(CodeId GUID PK)がバーコードに使用されていましたが、現在は、実際のバーコード値を追跡するために新しいIntフィールド(SerialId IDENTITY Int)を追加しています。テーブルのCodeIdフィールド(Codeと呼ばれる)を変更することは許可されていないため、これは私の奇妙な問題につながります。私は周りを見回しましたが、使用されていないこのQueryString idパラメーターは、私に起こっていることに対処するために見つけることができる最も近いものです。
私のルーティングは完全に正常です
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
モデルは正常です
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; }
}
GUIDがあり、IdがCodeId(テーブルのPK)などにマップされている場合、コントローラーは正常に機能しました。
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の検索に基づいてビューにレコードを返すことは理想的ではありませんが、実行可能である必要があります。