ASP.NET MVC3 增加、修改和删除操作实例

我们再新建一个表,名字命名为"Contact",打开"AndroidDB.edmx"文件,右键选择"从数据库更新模型"。这个前边已经介绍过,这里就不多说,这样在实体层就创建了"Contact"类及它的属性。接下来,我们新添加一个名为"ContactController"的控制器类,用来显示我们的留言表单并实现留言功能。我们先看看Controller中的代码,如下:

 代码如下 复制代码

public class ContactController : Controller
{
    Android.Models.AndroidEntities android = new AndroidEntities();
    //
    // GET: /Contact/

    public ActionResult Create()
    {
        return View();
    }

    //
    // POST: /Contact/Create
    [HttpPost]
    public ActionResult Create(Contact contact)
    {
        if (ModelState.IsValid)
        {
            android.AddObject("Contact", contact);
            android.SaveChanges();
            return RedirectToAction("../Home");
        }
        else
        {
            return View(contact);
        }
    }
}  

上边这些代码就是 Controller 中所需的所有代码了,非常简洁,是吧?需要说明的2点是:1.[HttpPostAttribute]表明了只有当表单提交方式为"Post"时,才执行第二个方法,其他情况下执行第一个Create()方法。2.我们使用类 ObjectContext 的方法AddObject()方法进行添加操作,参数分别是属性名和实体,AddToContact()这种方法现在已经弃用了,这点我们需要注意下。关于使用ObjectSet属性可以参考下ASP.NET MVC3 实例(三) 使用 Controller 进行数据的的查询。

接下来我们添加 View 模板,用来展示留言表单,在Create()方法上右键单击,Add View,如下图:

我们分别选择了 View data class 为"Contact",模板为"Create",得到如下的 View:

 代码如下 复制代码
@model Android.Models.Contact
<body>   
    <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Contact</legend>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.UserName)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.UserName)
                @Html.ValidationMessageFor(model => model.UserName)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.Email)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.Email)
                @Html.ValidationMessageFor(model => model.Email)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.Website)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.Website)
                @Html.ValidationMessageFor(model => model.Website)
            </div>
   
            <div class="editor-label">
                @Html.LabelFor(model => model.Content)
            </div>
            <div class="editor-field">
                @Html.TextAreaFor(model => model.Content,5,60,"Content")
                @Html.ValidationMessageFor(model => model.Content)
            </div>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }
</body>

这种写法在 ASP.NET MVC 2 里就已经有了,并没有太多可说的,它使用强类型的 HtmlHelper 方法输出相应的 HTML 的标记。看留言内容那里,可知我们可以定义输入框的大小和ID(Name),非常方便。到这里,我们就已经完成了 ASP.NET MVC 3 中的添加操作。当用户点击"Create"按钮时,表单中的数据会自动正确的赋给对应的属性。

我们要时刻记得“用户的输入是邪恶的”,这样我们要对用户的输入进行必要的验证。实体层数据验证的改进也是 MVC 3 中的一大亮点。@Html.ValidationSummary(true)表明我们已经启用了客户端的异步验证,很明显这样可以减少不必要的服务器请求,MVC3中微软全面使用 jQuery 进行客户端的验证。

ASP.NET MVC3中实体数据的验证是非常简单的,业务逻辑分离的非常好,如在验证留言内容时,只需添加如下代码:

 代码如下 复制代码
[Required(ErrorMessage="不能为空")]
[StringLength(1000, ErrorMessage = "长度在5-1000", MinimumLength = 5)]
public global::System.String Content
{
    get
    {
        return _Content;
    }
    set
    {
        OnContentChanging(value);
        ReportPropertyChanging("Content");
        _Content = StructuralObject.SetValidValue(value, true);
        ReportPropertyChanged("Content");
        OnContentChanged();
    }
}

分别验证了必填和长度两个属性,还有很多属性,我们就不做一一介绍了。最后看下结果,如下:

下边就让我们在此基础上来完成 ASP.NET MVC3 中的修改和删除操作。

首先,我们在 Contact 控制器类中添加一个名为 View()的方法,用来从 Contact 表中取出留言数据,并传递给列表页 "Index",方法如下:

 代码如下 复制代码
//
// GET: /Contact/
public ActionResult Index()
{
    var contact = from c in android.Contact
                    where c.IsValid == 1
                    orderby c.ID descending
                    select c;
    return View(contact.ToList());
}

我们使用 Linq 从 Contact 表中取出了所有有效数据(IsValid==1),并按ID降序显示。接下来,添加名为"Index"的视图,最终 "Index" 全部代码如下:

 代码如下 复制代码
@model IList<Android.Models.Contact>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            UserName
        </th>
        <th>
            Content
        </th>
        <th>
            Addtime
        </th>
    </tr>
   
@foreach (var item in Model) {
    <tr>
        <td>
            @item.UserName
        </td>
        <td>
            @item.Content
        </td>
        <td>
            @item.Addtime
        </td>
        <td>
            @Html.ActionLink("编辑", "Edit", new { id=item.ID }) |
            @Html.ActionLink("删除", "Delete", new { id = item.ID })
        </td>
    </tr>
}
   
</table>

可以看到,显示用的代码是非常整洁的,我们没有做样式方面的美化,最终的列表页效果如下:

修改操作、删除操作传递的参数都是留言ID,首先,我们看看修改操作,分别给 "Contact" Controller 添加名为 Edit() 两个方法,1.用来根据根据ID得到留言实体,并返回给编辑页;2.完成修改操作。如下:

 代码如下 复制代码

//
// GET: /Contact/Edit/5
public ActionResult Edit(int id)
{
    var message = android.Contact.Single(m => m.ID == id);
    return View(message);
}

//
// POST: /Contact/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
    try
    {
        var message = android.Contact.Single(m => m.ID == id);
        UpdateModel(message);
        android.SaveChanges();
        return RedirectToAction("Index");//返回到列表
    }
    catch
    {
        return View();
    }
}

为了简洁起见,修改时我们只修改留言是否有效,其他的和这个类似,"Edit"视图最终代码如下:

 代码如下 复制代码

@model Android.Models.Contact
@using (Html.BeginForm()) {
    <fieldset>
        <legend>Contact</legend>
   
        @Html.HiddenFor(model => model.ID)
        <div class="editor-label">
            @Html.LabelFor(model=>model.Content,"留言内容")
        </div>
        <div class="editor-field">
            @Model.Content
        </div>
           
        <div class="editor-label">
            @Html.LabelFor(model => model.IsValid,"是否有效")
        </div>
        <div class="editor-field">
            有效 @Html.RadioButtonFor(model=>model.IsValid,1)
            无效 @Html.RadioButtonFor(model=>model.IsValid,0)
        </div>
   
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}

 

页面的效果如下图所示:

其中RadioButtonFor同LabelFor使用方法类似,这样当我们点击列表页中的"编辑"时,先执行第一个"Edit"方法,根据ID将实体返回到我们的编辑页。当我们点击"Save"提交时,执行第二个"Edit"方法,并对数据库中的"Contact"表进行了修改操作,这样实现了在 ASP.NET MVC3 中的修改操作。

下边看看删除操作,"Contact" 控制器类中的删除方法只使用 Get 方式的就行,因为我们将根据传递过来的ID直接进行删除操作,如下:

 代码如下 复制代码
//
// GET: /Contact/Delete/5
public ActionResult Delete(int id)
{
    try
    {
        var contact = android.Contact.Single(c => c.ID == id);
        android.DeleteObject(contact);
        android.SaveChanges();
    }
    catch
    {
    }
    return RedirectToAction("../Contact");
}

当然了此时的"Delete" 视图完全为空也是可以的。删除操作执行后返回到我们的留言列表中,到这里删除操作就完成了。这里使用真删除是为了说明DeleteObject()方法,一般这种情况我们只需将"IsValid"字段修改为0即可,并不做真删除。还有一点要注意的是,例子中使用try进行异常的处理,因为 Linq 查询时会在有问题时抛出相应的异常、SaveChanges()也会抛出异常。

从这两篇文章我们不难发现,在 ASP.NET MVC3中我们不再需要手动写代码来接收参数了,你可以在添加、修改操作中看到我们并没有手动写代码来接收以"Post"方式提交过来的表单数据。如果你看的 MVC 3中的有些文章还在使用Request["parameter"]、Request.Form["parameter"]、Request.QueryString["parameter"]、collection["parameter"](collection 是 FormCollection 类对象)的方式接收参数,你就需要注意下了。当然,ASP.NET MVC3中还有非常多的特征,本系列还将会进行介绍。

时间: 2024-08-03 14:43:21

ASP.NET MVC3 增加、修改和删除操作实例的相关文章

JQuery EasyUI学习教程之datagrid 添加、修改、删除操作_jquery

一篇关于JQueryEasyUI学习之datagrid 添加.修改.删除 学习笔记教程有需要了解的朋友可参考本的笔记,批量删除,双击表单修改.选中行修改,增加行修改,再有就是扩展editor的方法,无需废话,直接上代码,代码中的注释写的很详细 <script type="text/javascript" charst="utf-8">var editFlag = undefined;//设置一个编辑标记 //因为layout框架指向href时,只取htm

怎样在asp网站的后台修改或删除前台网页的样式呢?

问题描述 怎样在asp网站的后台修改或删除前台网页的样式呢?求教各路大神... 解决方案 解决方案二:可以通过xxx.Attributes.Add("style","color:red;");这种方式添加样式解决方案三:引用1楼starfd的回复: 可以通过xxx.Attributes.Add("style","color:red;");这种方式添加样式 嗯,,,怎样删除呢?解决方案四:移除--不知道怎么搞了--返回js移除?

亲密接触ASP.Net(10) 增加修改删除数据

接上一节,我们这一节主要计论如何使用DataSet,在数据库中增加.修改.删除一个数据. 首先我们需要打开一个联结,我们的数据库还是用上一节的吧:) string MyConnString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:/test/test.mdb;";string strComm = "select * from UserList";ADOConnection MyConnection = n

ASP.NET2.0中对GridView删除操作时“未能找到带参数的非泛型方法”的解决方案

asp.net|解决 在ASP.Net中对ObjectDataSource自动配置数据源的[删除]操作的时候,会生成两个字段一个是 OldValuesParameterFormatString="original_{0}" 另外一个是 <DeleteParameters>   <asp:Parameter Name="original_XML_ID" Type="Int32" /></DeleteParameters

给jqGrid数据行添加修改和删除操作链接

我这里用的不是jqGrid的自带的编辑和删除操作,我已经把分页导航栏下的编辑,删除,搜索都取消掉了,就是这句$("#list1").navGrid("#pager1",{edit:false,del:false, search:false}), 然后在数据加载完成后,给每行添加了 修改和删除链接 jqGrid完成的事件是gridComplete:function(){}(可以理解为数据都准备好了), 因为从数据库获取到的json数据没有带修改和删除两项,所以在之后的

给jqGrid数据行添加修改和删除操作链接(之一)_jquery

我这里用的不是jqGrid的自带的编辑和删除操作,我已经把分页导航栏下的编辑,删除,搜索都取消掉了,就是这句$("#list1").navGrid("#pager1",{edit:false,del:false, search:false}), 然后在数据加载完成后,给每行添加了 修改和删除链接 jqGrid完成的事件是gridComplete:function(){}(可以理解为数据都准备好了), 因为从数据库获取到的json数据没有带修改和删除两项,所以在之后的

Sql中存储过程的定义、修改和删除操作

1.存储过程的分类 系统存储过程 本地存储过程(用户自定义) 临时存储过程(局部[#].全局[##]临时存储过程) 2.创建存储过程 --选出价格区间的商品信息 create procedure sp_goods_price @minprice float ,@maxprice float as select * from goods where price>=@minprice and price <=@maxprice go 执行存储过程: execute sp_goods_price 2

PHP+MySQL删除操作实例_php技巧

本文实例讲述了PHP+MySQL删除操作的使用技巧.分享给大家供大家参考.具体如下: 复制代码 代码如下: <h1>删除记录</h1>  <?php      //连接数据库的参数      $host = "localhost";      $user = "root";      $pass = "zq19890319";      $db = "phpdev";      //创建mysql

(ASP.NET)修改和删除DataGrid行——数据库访问

asp.net|datagrid|访问|数据|数据库 (ASP.NET)修改和删除DataGrid行--数据库访问 本程序涉及到数据库的添加,修改和删除操作. 懒得写了,把界面贴出来,照着界面画就可以了.本例数据库:SqlServer2000附带的pubs数据库,看一下连接字符串就很清楚了.如果要在本机器上运行,把uid和pwd改成你自己SQL登陆用户名和密码. 创建一个WEB页面,命名为:Add.aspx. 界面设计如图: Add.aspx代码: <%@ Page language="c