Когда я ввожу localhost / MyController / MyActionName / 1, я получаю нулевое значение в необязательном параметре, почему? - PullRequest
2 голосов
/ 06 января 2012

РЕШЕНИЕ

по маршруту

 routes.MapRoute(
      "Whatever", // Route name
      "{controller}/{action}/{id}", //{ID} MUST BE USED IN YOUR CONTROLLER AS THE PARAMETER 
      new { controller = "MyController", action = "MyActionName", id = UrlParameter.Optional } // Parameter defaults
  );

И это все! Я думаю, вы должны использовать имя идентификатора в public actionresult (int id // должен быть ID ЗДЕСЬ, как global.asax)

Steps to reproduce my problem: 
1. Create a new mvc3 application
2. Go to home controller and put Index(int? x){ return view()}
3. Run the application
4. Go to the url type in the url http://localthost:someport/Home/Index/1
5. Insert a break point in controller to see the value of x 
6. Notice that even if you put the url above x NOT equal to 1 as is suppose to!

Я просто не понимаю, почему я получаю нулевое значение в идентификаторе ....

 public ActionResult MyActionName(int? id)
    {
       //the id is null!!!!!!!!!!!! event thought i just entered the url below!
    }

Я ввожу следующий URL в своем браузере http://locahost/MyController/MyActionName/1

// Я также поместил это в свой global.asax, но это не очень помогает.

   routes.MapRoute(
      "Whatever", // Route name
      "{controller}/{action}/{id}", // URL with parameters
      new { controller = "MyController", action = "MyActionName", id = UrlParameter.Optional } // Parameter defaults
  );

И! Моя ошибка, если я поставлю

  public ActionResult MyActionName(int id)
        {
           //the id is null!!!!!!!!!!!! event thought i just entered the url below!
        }

Обратите внимание, что приведенный выше пример был сделан для простоты, эта ошибка относится к реальному применению.

Ошибка сервера в приложении '/'.

Словарь параметров содержит пустую запись для параметра «MvrId» непустого типа «System.Int32» для метода «System.Web.Mvc.ActionResult Index (Int32)» в «MedicalVariance.Controllers.MedicineManagementController». Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр. Имя параметра: параметры Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.ArgumentException: словарь параметров содержит пустую запись для параметра «MvrId» необнуляемого типа «System.Int32» для метода «System.Web.Mvc.ActionResult Index (Int32)» в «MedicalVariance» .Controllers.MedicineManagementController. Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр. Имя параметра: параметры

1 Ответ

2 голосов
/ 06 января 2012

Убедитесь, что ваш маршрут определен до маршрута по умолчанию.

...