ASP.NET Visual Studio脚手架id参数

时间:2017-01-26 00:17:41

标签: c# asp.net-mvc visual-studio parameters

当我在Visual Studio中创建一个MVC项目时,它为我支持控制器。在“详细信息”,“编辑”和“删除操作”中,“操作”中的“int?id”参数。

这个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);
    }

2 个答案:

答案 0 :(得分:0)

AFAIK,在使用脚手架创建具有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<int>后面的原因是声明id参数是为了确保检查从视图端传递的可能空值(注意控制器使用{{1基于主键值在数据库中搜索}})。

答案 1 :(得分:0)

好的,我会尝试解释。当您创建一些控制器(非空)时,它会为您编写一些默认操作。如下所示。

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

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

希望它有所帮助。