“Словарь параметров содержит пустую запись для параметра” - Как зафиксировать?

Я пытаюсь реализовать страницу редактирования в администраторе порядка для изменения данных в базе данных. К сожалению, я встречаюсь с ошибкой.

Код ниже:

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= "" }
);

но тем не менее я получаю ошибку.

38
задан DaveRandom 25 February 2013 в 21:23
поделиться

2 ответа

Эта пустая строка для 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 } 
44
ответ дан 27 November 2019 в 03:36
поделиться

стандартный класс "int" (int32) не принимает значения NULL, и в этом случае он не выполнит приведение пустой строки к int и попытается присвоить ему значение NULL.

Я бы, наверное, посмотрел на то, чего вы пытаетесь достичь - если вы пытаетесь заставить администратора иметь идентификатор продукта, чтобы он мог редактировать эту запись в базе данных, я бы подумал о том, чтобы поместить это в объект Request или какой-либо другой метод, который придаст больше гибкости.

0
ответ дан 27 November 2019 в 03:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: