欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.Net MVC开发基础学习笔记(9):查看详情、编辑数据、删除数据

程序员文章站 2022-04-14 10:16:06
前言 所谓万事开头难,前面用两节介绍了查询页面,一节介绍了创建数据。由于前面做了大量的铺垫,本节就能顺利的将查看详情、编辑数据、删除数据在一节中全部介绍给大家。前后这几节加起来就完成了一个简单信息的...

前言

所谓万事开头难,前面用两节介绍了查询页面,一节介绍了创建数据。由于前面做了大量的铺垫,本节就能顺利的将查看详情、编辑数据、删除数据在一节中全部介绍给大家。前后这几节加起来就完成了一个简单信息的增删改查(crud)的所有操作。

添加链接

要进行这三个操作,首先在查询页面的每一条记录后面添加对应的链接。代码如下:

 



@html.displayfor(modelitem => item.firstname)
@html.displayfor(modelitem => item.lastname)
@html.displayfor(modelitem => item.sex)
@html.displayfor(modelitem => item.rating)
@html.actionlink("details","details", new { id = item.id }) | @html.actionlink("edit", "edit" , new { id = item.id }) | @html.actionlink("delete", "delete", new { id = item.id })


 

上面代码对应着数据列表的一行,其中黄色的部分就是我们添加的链接。这三个链接对应三个不同的操作,他们都需要id作为参数来确定操作的是哪一条数据,改动后的页面显示如下:

ASP.Net MVC开发基础学习笔记(9):查看详情、编辑数据、删除数据

红框部分就是我们添加的链接。

查看详情

查看详情对应details链接。点击链接之后会请求当前contoller,也就是companycontroller的details action。那么我们就在~\controllers\companycontroller.cs下写这个action。代码如下:

 

public actionresult details(int? id)
{
    if (id == null)
    {
        return new httpstatuscoderesult(httpstatuscode.badrequest);
    }
    worker worker = db.workers.find(id);
    if (worker == null)
    {
        return httpnotfound();
    }
    return view(worker);
}

 

第3-6行表示如果访问这个actions时没有给参数id则返回badrequest错误。如下图所示,地址栏里面没有给出id,返回bad request错误。

ASP.Net MVC开发基础学习笔记(9):查看详情、编辑数据、删除数据

第7-11行表示如果根据id没有找到对应的信息则返回httpnotfound错误,如下图所示:

ASP.Net MVC开发基础学习笔记(9):查看详情、编辑数据、删除数据

第12行,如果根据id找到了对应的信息则用view显示。

在~views\company\下创建details.cshtml视图,写入代码如下:

 

@model slarkinc.models.worker
@{
    viewbag.title = "details";
}

worker details

student


@html.displaynamefor(model => model.firstname)
@html.displayfor(model => model.firstname)
@html.displaynamefor(model => model.lastname)
@html.displayfor(model => model.lastname)
@html.displaynamefor(model => model.sex)
@html.displayfor(model => model.sex)
@html.displaynamefor(model => model.rating)
@html.displayfor(model => model.rating)

@html.actionlink("edit", "edit", new { id = model.id }) | @html.actionlink("back to list", "index")


 

代码中用displaynamefor函数显示属性名,用displayfor函数显示属性值。

页面用

 
和bootstrap的"dl-horizontal"类布局页面,使每一个属性名和属性值占一行,显示效果如下:

 

ASP.Net MVC开发基础学习笔记(9):查看详情、编辑数据、删除数据

第37行给出了编辑此页面的链接。38行给出返回查询页面的链接。

编辑数据

在~\controllers\companycontroller.cs中加入用来进入edit页面的action代码如下:

 

public actionresult edit(int? id)
{
    if (id == null)
    {
        return new httpstatuscoderesult(httpstatuscode.badrequest);
    }
    worker worker = db.workers.find(id);
    if (worker == null)
    {
        return httpnotfound();
    }
    return view(worker);
}

 

看起来眼熟?没错,和details的action是一模一样的,这里就不重复了。

下面写view。在~\views\company\下创建edit.cshtml视图,写入代码如下:

 

@model slarkinc.models.worker
@{
    viewbag.title = "edit";
}

worker edit

@using (html.beginform()) { @html.antiforgerytoken()
@html.validationsummary(true) @html.hiddenfor(model => model.id) @html.labelfor(model => model.firstname, new { @class = "control-label col-md-2" }) @html.editorfor(model => model.firstname) @html.validationmessagefor(model => model.firstname)

 

 

@html.labelfor(model => model.lastname, new { @class = "control-label col-md-2" }) @html.editorfor(model => model.lastname) @html.validationmessagefor(model => model.lastname)

 

 

@html.labelfor(model => model.sex, new { @class = "control-label col-md-2" }) @html.enumdropdownlistfor(model => model.sex) @html.validationmessagefor(model => model.sex)

 

 

@html.labelfor(model => model.rating, new { @class = "control-label col-md-2" }) @html.editorfor(model => model.rating) @html.validationmessagefor(model => model.rating)

 

 

@html.submit("submit")

 

 

 

}

@html.actionlink("back to list", "index")


 

这个页面的代码与上一节的插入数据页面的代码基本相同,可以参照上一节的代码说明,需要看的5-ef6-bs3-get-started-create.html" target="_blank">点这里。

第12行用hiddenfor函数储存当前要修改的记录的id以便提交后找到对应的记录进行更新。

页面显示如下:

ASP.Net MVC开发基础学习笔记(9):查看详情、编辑数据、删除数据

接下来我们来写提交更新数据之后需要访问的action,在~\controllers\company.cs中加入用post方法访问的edit action,代码如下:

 

[httppost]
[validateantiforgerytoken]
public actionresult edit([bind(include = "id, firstname, lastname, sex, rating")] worker worker)
{
    if (modelstate.isvalid)
    {
        db.entry(worker).state = entitystate.modified;
        db.savechanges();
        return redirecttoaction("index");
    }
    return view(worker);
}

 

这段带码的知识点讲解与上一节create提交action的基本相同,点击。

不同点是第7行,根据获得的worker实例,在数据列表中找到对应记录,更新其值,并设置其状态为modified。最后将改动保存到并跳转回数据查询页面。

删除数据

删除数据不需要页面显示数据,只需在companycontroller下加入一个delete action删除数据即可,代码如下:

 

public actionresult delete(int id)
{
    try
    {
        worker workertodelete = new worker() { id = id };
        db.entry(workertodelete).state = entitystate.deleted;
        db.savechanges();
    }
    catch(dataexception/*dex*/)
    {
        return redirecttoaction("index", new { id = id, savechangeserror = true });
    }
    return redirecttoaction("index");
}

 

第5行创建一个只有id被赋值的worker实例。然后第6行根据这个实例的id在数据库中找到对应的数据,设置其状态为deleted已删除,第7行执行删除操作。

如果删除成功则在第13行跳转回查询页面,如果失败则跳转回查询页面并传递两个参数传递失败记录的id及savechangeserror = true。根据这两个传递的参数可以在查询页面写出错误信息。这里就不详细描述了。

这样点击删除链接就能在查询页面看到那条数据被删除了。

结尾

到此,我们完成了对一个简单数据模型的增删改查操作。不过其中还有很多知识点没有详细描述,比如数据验证、ef操作数据的函数、view中的各种不同的http响应等等。后面会一一详细介绍。