2016-07-01 2 views
0

Все похожие темы разрешены, но я не могу найти такую ​​же ошибку, как и моя.null entry для параметра 'id'

Модель:

public class CountriesViewModel 
{ 
    public int BuffId { get; set; } 
    public string CountryId { get; set; } 
    public string Name { get; set; } 
} 

Вид:

@model List<BTGHRM.Models.CountriesViewModel> 
    @{ 
     WebGrid grid = new WebGrid(Model, canSort: false, rowsPerPage: 15); 
     int row = 0; 
    } 


    @if (Model.Any()) 
    { 

     @grid.GetHtml(
       tableStyle: "table", 
       headerStyle: "table_HeaderStyle", 
       footerStyle: "table_PagerStyle", 
       rowStyle: "table_RowStyle", 
       alternatingRowStyle: "table_AlternatingRowStyle", 
       selectedRowStyle: "table_SelectedRowStyle", 
       columns: grid.Columns(

       grid.Column("Name", @Resources.Localization.country, format: @<text> 
         <span class="display-mode"><label id="NameLabel">@item.Name</label></span> 
         @Html.TextBox("Model[" + (++row - 1).ToString() + "].Name", (object)item.Name, new { @class = "edit-mode" }) 
       </text>, style: "p40"), 

         grid.Column("", "", format: @<text> 
         @Html.Hidden("Model[" + (row - 1).ToString() + "].BuffId", (object)item.BuffId, new { @class = "edit-mode" }) 
        </text>, style: "p13"), 

      grid.Column("", "", format: @<text> 
         <a href="DeleteCountryRecord/@item.BuffId" id="@item.BuffId" class="link_button delete-button display-mode">@Resources.Localization.delete</a> 
      </text>) 
       ) 
      ) 
    } 

I`d Чтобы удалить строку, отправив его идентификатор (buffId) в методе действия:

public ActionResult DeleteCountryRecord(int BuffId) 
    { 
     using (var db = new HRMEntities()) 
     { 
      Country RemovableLine = db.Countries.Find(BuffId); 
      try 
      { 
       db.Countries.Remove(RemovableLine); 
      } 
      catch 
      { 
       TempData["Message"] = App_GlobalResources.Localization.error; 
      } 
      db.SaveChanges(); 
     } 
     return RedirectToAction("CountryCodes"); 
    } 

Я получаю все Идентификаторы правые, но у меня есть ошибка

Словарь параметров содержит нулевую запись для параметра «BuffId» не-nullable типа «System.Int32» для метода «System.Web.Mvc.ActionResult DeleteCountryRecord (Int32)» в «BTGHRM.Controllers.AdministrationController». Необязательный параметр должен быть ссылочным типом, нулевым типом или объявлен как необязательный параметр. Имя параметров: параметры

Но в ссылке, которая genered по нажатию кнопки можно увидеть, что идентификатор размещен справа:

http://localhost:59763/Administration/DeleteCountryRecord/17

Что может быть моя проблема ?

ответ

3

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

Если вы добавляете новый маршрут, он будет идти с остальной частью вашего маршрута (вероятно RouteConfig.cs), и убедитесь, что она поднимается выше установленного по умолчанию:

routes.MapRoute(
    name: "DeleteCountryRecord", 
    url: "Administration/DeleteCountryRecord/{BuffId}", 
    defaults: new { controller = "Administration", action = "DeleteCountryRecord" } 
); 
Смежные вопросы