У меня странная проблема с отображением записи. Если пользователь вводит числовое (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
Что я делаю неправильно? Не идеально, чтобы мое представление возвращало запись, основанную на поиске определенного SerialId вместо CodeId, но это должно быть выполнимо, верно?