2016-04-28 2 views
0

У меня есть контроллер MVC:MVC - Как избежать «Словарь параметров содержит нулевой вход для параметра»

public ActionResult EditProduct(int id) 
    { 
     var model = products.GetById(id); 

     return View(model); 
    } 

    [HttpPost] 
    public ActionResult EditProduct(Product product) 
    { 
     products.Update(product); 
     products.Commit(); 

     return RedirectToAction("ProductList"); 
    } 

и когда я делаю это http://localhost:56339/Admin/EditProduct без прохождения в ИО, как этот http://localhost:56339/Admin/EditProduct/1, я получаю сообщение об ошибке Словарь параметров содержит нулевую запись для параметра.

Как предотвратить, если пользователи набирают URL-адрес без идентификатора?

+3

Вы можете сделать его nullable - 'int? id' - и перенаправить на другую страницу с ошибкой, если она не имеет значения. –

+0

Я согласен с @StephenMuecke или вы также можете автоматически присвоить значение по умолчанию для идентификатора. Думаю, нам нужно будет знать, что вы хотите в этом случае. –

+0

Это трюк, я просто хочу перенаправить его на другую страницу. Спасибо вам всем! –

ответ

1

От Stephen Muecke: Вы можете сделать его недействительным - int? id - и перенаправить на другую страницу с ошибкой, если она не имеет значения.

2

Вы можете добиться этого из двух способов:

1) Установите Nullable типа параметр

public ActionResult EditProduct(int? id) 
    { 
if (id == null) 
      { 
     // nullable logic here 
      } 
      else { 
      // your logic here 
      } 
     return View(); 
    } 

2) Установка дополнительного параметр

public ActionResult EditProduct(int id=0) 
     { 
    if (id == 0) 
       { 
      // nullable logic here 
       } 
       else { 
       // your logic here 
       } 
      return View(); 
     } 

Надеется, что это будет поможет вам.

Смежные вопросы