Я пытаюсь реализовать страницу редактирования в администраторе порядка для изменения данных в базе данных. К сожалению, я встречаюсь с ошибкой.
Код ниже:
public ViewResult Edit(int productId) {
// Do something here
}
но я получаю эту ошибку:
"The parameters dictionary contains a null entry for parameter 'productId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ViewResult Edit(Int32)' in 'WebUI.Controllers.AdminController'. To make a parameter optional its type should be either a reference type or a Nullable type.
Parameter name: parameters"
Я изменил свой маршрут в Global.asax.cs
как это:
routes.MapRoute(
"Admin",
"Admin/{action}/{ productId}",
new { controller = "Admin", action = "Edit", productId= "" }
);
но тем не менее я получаю ошибку.
Эта пустая строка для productId
(в вашем маршруте по умолчанию) будет проанализирована до нуля. запись в Framework, и поскольку int
не допускает null
... вы получаете сообщение об ошибке.
Измените: с
public ViewResult Edit(int productId)
на
public ViewResult Edit(int? productId)
, если вы хотите разрешить вызывающему абоненту не передавать идентификатор продукта, что похоже на то, что вы хотите сделать в зависимости от того, как настроен ваш маршрут.
Вы также можете перенастроить свой маршрут по умолчанию, чтобы он передавал некоторые известные значения по умолчанию, когда не указан productId:
routes.MapRoute(
"Admin",
"Admin/{action}/{ productId}",
new { controller = "Admin", action = "Edit", productId= -1 }
стандартный класс "int" (int32) не принимает значения NULL, и в этом случае он не выполнит приведение пустой строки к int и попытается присвоить ему значение NULL.
Я бы, наверное, посмотрел на то, чего вы пытаетесь достичь - если вы пытаетесь заставить администратора иметь идентификатор продукта, чтобы он мог редактировать эту запись в базе данных, я бы подумал о том, чтобы поместить это в объект Request или какой-либо другой метод, который придаст больше гибкости.