C# ASP.NET Visual Studio脚手架id参数

C# ASP.NET Visual Studio脚手架id参数,c#,asp.net-mvc,visual-studio,parameters,C#,Asp.net Mvc,Visual Studio,Parameters,当我在VisualStudio中创建MVC项目时,它为我搭建了控制器。在详细信息、编辑和删除操作中,操作中有一个“int?id”参数 这个身份证是从哪里来的?它如何知道要查找哪个id?它是否知道它正在寻找与该对象相关的主键id 谢谢 public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCo

当我在VisualStudio中创建MVC项目时,它为我搭建了控制器。在详细信息、编辑和删除操作中,操作中有一个“int?id”参数

这个身份证是从哪里来的?它如何知道要查找哪个id?它是否知道它正在寻找与该对象相关的主键id

谢谢

public ActionResult Details(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Comment comment = db.Comments.Find(id);
        if (comment == null)
        {
            return HttpNotFound();
        }
        return View(comment);
    }

好的,当使用CRUD操作创建控制器时,MVC在
RegisterRoutes
方法中查找默认路由,如下所示:

public class RouteConfig 
{
    public static void RegisterRoutes(RouteCollection routes) 
    {
        routes.MapRoute(
                name: "Default", // Route name
                url: "{controller}/{action}/{id}", // URL with parameters
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }
}
根据上面的路线定义,
id
参数被声明为可选参数,但是在编辑或删除操作期间,控制器需要通过提供
id
参数来知道应该编辑/删除哪些数据


选择
Nullable
声明
id
参数的原因是为了确保检查从视图端传递的可能的null值(注意,控制器使用
Comment Comment=db.Comments.Find(id)
)基于主键值在数据库中搜索。),当使用CRUD操作创建控制器时,MVC在
RegisterRoutes
方法中查找默认路由,如下所示:

public class RouteConfig 
{
    public static void RegisterRoutes(RouteCollection routes) 
    {
        routes.MapRoute(
                name: "Default", // Route name
                url: "{controller}/{action}/{id}", // URL with parameters
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }
}
根据上面的路线定义,
id
参数被声明为可选参数,但是在编辑或删除操作期间,控制器需要通过提供
id
参数来知道应该编辑/删除哪些数据


选择
Nullable
声明
id
参数的原因是为了确保检查从视图端传递的可能的null值(注意,控制器使用
Comment Comment=db.Comments.Find(id)
)基于主键值在数据库中搜索)。好的,我将尝试解释。当您创建某个控制器(不是空的)时,它会为您编写一些DEAFULT操作。具体如下

索引-它显示实体模型的数据列表。 创建-使用它可以创建新对象(实例)并将其添加到实体模型中。 删除-它删除一个实例。 详细信息-如果要查看实例的详细信息,请使用此操作。参数是“Id”。因此,服务器根据Id(主键)从数据库中获取确切的实例。那么这个动作是如何获得Id的呢?答案是:从观点来看。通过发送单个实例的id,从该视图请求单个实例的详细视图。这有意义吗?我将附加一个网格图片在这里

因此,从网格中,如果你向右看,你可以看到一个钢笔标志和一个页面标志。页面标志是我的详细信息按钮。因此,如果我单击第一行的页码符号,我将发送名为Rupa的实例的主键,并请求服务器获取该实例的详细数据


希望有帮助。

好的,我试着解释一下。当您创建某个控制器(不是空的)时,它会为您编写一些DEAFULT操作。具体如下

索引-它显示实体模型的数据列表。 创建-使用它可以创建新对象(实例)并将其添加到实体模型中。 删除-它删除一个实例。 详细信息-如果要查看实例的详细信息,请使用此操作。参数是“Id”。因此,服务器根据Id(主键)从数据库中获取确切的实例。那么这个动作是如何获得Id的呢?答案是:从观点来看。通过发送单个实例的id,从该视图请求单个实例的详细视图。这有意义吗?我将附加一个网格图片在这里

因此,从网格中,如果你向右看,你可以看到一个钢笔标志和一个页面标志。页面标志是我的详细信息按钮。因此,如果我单击第一行的页码符号,我将发送名为Rupa的实例的主键,并请求服务器获取该实例的详细数据


希望有帮助。

它通过您回答的对话问题搭建控制器,好的。您选择了带有空操作的控制器,它提供了空操作。是的,它知道它在寻找PK,并使用null int作为其类型。您现在可以根据自己的情况进行修复。它通过您回答的对话问题搭建控制器,好的。您选择了带有空操作的控制器,它提供了空操作。是的,它知道它在寻找PK,并使用null int作为其类型。您现在可以根据您的情况进行修复。非常感谢您,它帮助了您很多。现在我明白了,它来自于观点……有道理!我非常高兴谢谢你,这对我很有帮助。现在我明白了,它来自于观点……有道理!非常乐意