2015-11-19 3 views
-1

Это так, что этот должен использоваться только тогда, когда я вхожу в свой индекс в новостях. но если я, например, войду и, должно быть, знал все новости, то вот здесь ошибка вперед.Проверьте, установлено ли значение на RouteConfig.cs

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Index(System.String, Int32)' in 'MVCSIte.Controllers.NewController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameternavn: parameters

RouteConfig.cs

Она должна быть такой, чтобы она просто проверка на несколько URL и ID в противном случае он не будет использовать этот.

routes.MapRoute("new", "new/{url}/{id}", new 
      { 
       controller = "new", 
       action = "Index", 
       url = UrlParameter.Optional, 
       id = UrlParameter.Optional 
      }); 

NyhedController.cs

public class New : Controller 
{ 
    DataLinqDB db = new DataLinqDB(); 

    // GET: Nyhed/here shows the single news 
    public ActionResult Index(string url, int id) 
    { 
     NyhedPage model = new NyhedPage(); 

     nyheder nyheden = db.nyheders.FirstOrDefault(x => x.Id == id && x.url == url); 
     if (nyheden != null) 
     { 
      model.NyhedenTitle = new HtmlString(nyheden.title); 
      model.NyhedenDeck = new HtmlString(nyheden.deck); 
      model.Tekst = new HtmlString(nyheden.tekst); 
     } 

     List<nyheder> NyhedsList = db.nyheders.Where(x => x.Id != id && x.url != url).OrderByDescending(i => i.Id).Take(4).ToList(); 
     model.NyhedsList = NyhedsList.ToList(); 


     return View(model); 
    } 
} 

, что я хотел бы меня в том, что, когда я иду на новости, поскольку она показывает все новости, есть этот код:

//Here it shows all the news 
public ActionResult Allenyheder() 
    { 
     NyhedPage model = new NyhedPage(); 

     List<nyheder> NyhederIndhold = db.nyheders.Take(12).OrderByDescending(i => i.Id).ToList(); 
     model.NyhederIndhold = NyhederIndhold.ToList(); 


     return View(model); 
    } 
+0

Ваше определение маршрута имеет 'controller =" new ",' но контроллер, который вы указали, является 'NyhedController'? И как вы хотите назвать эти методы? –

+0

@StephenMuecke теперь я редактирую его. извините –

+0

Непонятно, что вы просите или ожидаете. Как вы называете эти методы (и только последний параметр в определении маршрута может быть помечен 'UrlParameter.Optional', но поскольку вы, кажется, всегда проходите оба метода, а затем удаляете его из обоих) –

ответ

0

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Index(System.String, Int32)' in 'MVCSIte.Controllers.NewController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameternavn: parameters

Вы видите эту ошибку, потому что ваша подпись метода:

public ActionResult Index(string url, int id) 

Независимо от того, какая ссылка отправляет вам запрос на получение здесь, не содержит часть URL-адреса {id}. Поскольку id не имеет значения NULL, вы должны передать ему значение, MVC знает, что вы пытаетесь получить доступ к этому методу, а не к другой, следовательно, к ошибке. Вы можете либо исправить все, что генерирует ссылки, включив параметр id, либо вы можете сделать id nullable int или даже установить значение по умолчанию (хотя я не думаю, что это применимо в контексте вашего метода).

public ActionResult Index(string url, int? id) 
{ 
    if (!id.HasValue) 
    { 
     // Return 404 maybe? 
    } 
    else 
    { 
     // Your existing code 
    } 
} 

Проблема я думаю, что вы испытываете (от ваших комментариев) заключается в следующем:

@Html.ActionLink("Nyhed", "Allenyheder", "New") 

Вам необходимо пройти id параметр в этом ActionLink:

@Html.ActionLink("Nyhed", "Allenyheder", "New", new { id = IdOfNewsYouWantHere }) 
+0

Говорят, что есть error 'HasValue': Ошибка: **« int »не содержит определения для« HasValue », и не может быть найден метод расширения« HasValue », принимающий первый аргумент типа« int »(вам не хватает директивы using или Ссылка на сборку?) ** –

+0

@JesperPetersen Вы изменили 'int' на' int? 'в вашей сигнатуре метода? – ediblecode

+0

Если я добавлю 'public ActionResult (string url, int? Id)', вы увидите его с этой одной ошибкой: ** метод должен иметь тип возврата ** –

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