C# 检查该值是否设置为on RouteConfig.cs

C# 检查该值是否设置为on RouteConfig.cs,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,这是这样的,只有当我进入我的新闻索引时,才应该使用这个。但是如果我进去了,一定知道所有的消息,那么这个错误就会继续下去 参数字典包含的参数“id”为空 方法的不可为Null的类型“System.Int32” 中的“System.Web.Mvc.ActionResult索引(System.String,Int32)” “MVCSIte.Controllers.NewController”。可选参数必须是 引用类型、可为null的类型或可声明为可选类型 参数参数AVN:参数 RouteConfig.

这是这样的,只有当我进入我的新闻索引时,才应该使用这个。但是如果我进去了,一定知道所有的消息,那么这个错误就会继续下去

参数字典包含的参数“id”为空 方法的不可为Null的类型“System.Int32” 中的“System.Web.Mvc.ActionResult索引(System.String,Int32)” “MVCSIte.Controllers.NewController”。可选参数必须是 引用类型、可为null的类型或可声明为可选类型 参数参数AVN:参数

RouteConfig.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);
    }
}
它应该是这样的,它只是检查了几个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);
    }
}
公共类新建:控制器
{
DataLinqDB db=新的DataLinqDB();
//GET:Nyhed/这里显示单一新闻
公共操作结果索引(字符串url,int-id)
{
NyhedPage模型=新NyhedPage();
nyheder-nyheden=db.nyheders.FirstOrDefault(x=>x.Id==Id&&x.url==url);
if(nyheden!=null)
{
model.NyhedenTitle=新的HtmlString(nyheden.title);
model.NyhedenDeck=新HtmlString(nyheden.deck);
model.Tekst=新的HtmlString(nyheden.Tekst);
}
列出NyhedsList=db.nyheders.Where(x=>x.Id!=Id&&x.url!=url).OrderByDescending(i=>i.Id).Take(4.ToList();
model.NyhedsList=NyhedsList.ToList();
返回视图(模型);
}
}
我想告诉我的是,当我去新闻,因为它显示了所有的新闻,有这个代码:

//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);
    }
//这里显示了所有的新闻
公共行动结果Allenyheder()
{
NyhedPage模型=新NyhedPage();
List NyhederIndhold=db.nyheders.Take(12).OrderByDescending(i=>i.Id).ToList();
model.NyhederIndhold=NyhederIndhold.ToList();
返回视图(模型);
}
参数字典包含“MVCSIte.Controllers.NewController”中方法“System.Web.Mvc.ActionResult Index(System.String,Int32)”的不可为null类型“System.Int32”的参数“id”的null条目。可选参数必须是引用类型、可为null的类型或声明为可选参数。参数AVN:参数

您看到此错误是因为您的方法签名是:

public ActionResult Index(string url, int id)
在这里发送get请求的任何链接都不包含URL的
{id}
部分。由于
id
不可为空,因此必须向其传递一个值,MVC知道您正在尝试访问此方法,而不是另一个方法,因此出现错误。您可以修复生成链接的任何内容以包含参数
id
,或者将
id
设置为可为空的int,甚至设置默认值(尽管我认为这不适用于您的方法上下文)

我认为你(从你的评论中)遇到的问题是:

您需要在该
ActionLink
中传递
id
参数:

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

您的路线定义有
controller=“new”,
但是您显示的控制器是
NyhedController
?你想怎么称呼这些方法?@StephenMuecke让我现在编辑它。对不起,不清楚你的要求或期望是什么。如何调用这些方法(并且只有路由定义中的最后一个参数可以标记为
urlparmeter.Optional
,但由于您似乎总是将这两个参数都传递给该方法,因此请将其从这两个参数中删除)他们说存在错误
HasValue
:错误是:“int”不包含“HasValue”的定义,并且找不到接受第一个“int”类型参数的扩展方法“HasValue”(是否缺少using指令或程序集引用?)@Jesperpersen您是否将方法签名中的
int
更改为
int?
?如果我添加
public ActionResult(字符串url,int?id)
您将看到它,其中有一个错误:方法必须有一个返回type@JesperPetersen啊,它应该是
公共操作结果索引(字符串url,int?id)
。抱歉,请参阅编辑。因此问题只是现在它不会显示包含所有新闻的页面。
@Html.ActionLink("Nyhed", "Allenyheder", "New", new { id = IdOfNewsYouWantHere })