现在的位置: 首页 > 综合 > 正文

asp.net mvc 3.0详细笔记__14__了解支架

2014年10月11日 ⁄ 综合 ⁄ 共 4973字 ⁄ 字号 评论关闭

        欢迎一起来学习MVC 3.0,我们在一步一个脚印的做一个MVC 3.0的项目,期间会有很多值得探索的地方。将会学到Razor,Lampda,Entity
Framework
,Linq C#新特性
等等知识,一起加油吧!

本次重点突破

                     各种支架的使用

工具资源下载http://download.csdn.net/detail/dhcsimida/6779357下载过就不用重复下载了

(1)由于之前的操作都是给用户操作的,而后台管理员的操作界面还没有做,下面就做这件事。首先创建 StoreManagerController 控制器。


(2)因为管理员有”创建”、”更新”、”删除”和”查看”等权限,因此 我们将通过使用 ASP.NET MVC3 中提供的脚手架功能来实现。在添加控制器的窗口中,注意需要选中
为”创建”、”更新”、”删除”和”详细信息” 方案添加操作方法。


(3)点击"Add"按钮之后,在StoreManagerController中添加代码:private MusicStoreEntity db = new MusicStoreEntity();最终代码代码3.1:

代码3.1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyMusicStore.Controllers
{
    public class StoreManagerController : Controller
    {
        private MusicStoreEntity db = new MusicStoreEntity(); 
        //
        // GET: /StoreManager/

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

        //
        // GET: /StoreManager/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /StoreManager/Create

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

        //
        // POST: /StoreManager/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /StoreManager/Edit/5
 
        public ActionResult Edit(int id)
        {
            return View();
        }

        //
        // POST: /StoreManager/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add update logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /StoreManager/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /StoreManager/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}

(4)学习这么久了也应该知道,下面该做什么了吧,对,添加和修改Index对应的视图。

         首先为 Index 增加强类型的视图。需要在对话框中选中"创建强类型视图",然后,选中模型类,在支架模板中选择 List,这是因为我们需要在 Index视图中处理专辑的列表。如图4.1

图4.1


(5)让我们来快速编辑一下 StoreManager 的 Index 视图

@model IEnumerable<MyMusicStore.Models.Album>
@{ 
    ViewBag.Title = "Index"; 
}
<h2>
    Index</h2>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            Genre
        </th>
        <th>
            Artist
        </th>
        <th>
            Title
        </th>
        <th>
            Price
        </th>
        <th>
        </th>
    </tr>
    @foreach (var item in Model)
    { 
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Genre.Name)
            </td>
            <td>
                @Html.Label(item.Artist.Name)
            </td>
            <td>
                @Html.Label( item.Title)
            </td>
            <td>@item.Price
                @*@Html.Label(item.Price.HasValue ? item.Price.Value.ToString("###,###.00") : string.Empty)*@
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.AlbumId }) |
                @Html.ActionLink("Details", "Details", new { id = item.AlbumId }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.AlbumId })
            </td>
        </tr>
    }
</table>

(5)更新Index,最终代码如代码5.1

代码5.1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyMusicStore.Controllers
{
    public class StoreManagerController : Controller
    {
        private MusicStoreEntity db = new MusicStoreEntity();
        //
        // GET: /StoreManager/

        public ActionResult Index()
        {

            var albums = db.Album.ToList();

            return View(albums);

        }


        //
        // GET: /StoreManager/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /StoreManager/Create

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

        //
        // POST: /StoreManager/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /StoreManager/Edit/5
 
        public ActionResult Edit(int id)
        {
            return View();
        }

        //
        // POST: /StoreManager/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add update logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /StoreManager/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /StoreManager/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}

(7)执行程序,首页面正常显示后,在浏览器地址栏的地址后加:/StoreManager或者/StoreManager/Index,结果页面如图7.1

图7.1


(8)我们依次创建编辑、详细内容和删除链接的视图。

将光标放置在 Edit 的 Action 方法内,单击鼠标右键,在弹出菜单中选择添加视图


(9)需要注意的是,你会发现 StoreManagerController 中存在两个同名的 Edit 方法,第二个方法前面使用了 [HttpPost] 标签,这个标签表示第二个Edit方法处理的请求是用Post方式提交的 ,而第一个 Edit 方法处理的请求是 用Get方式提交的。那么什么时候用Get,什么时候用Post呢?一句话:为用户提供编辑表单就用Get,获取用户的提交就用Post。
解释:在 ASP.NET MVC 中,当用户想编辑数据的时候,用 GET向服务器发送请求,当请求到达服务器后,就调用不带标签的Action,此方法向客户端返回view视图,就是用户想要的编辑页面;这个编辑页面包含一个 form 表单,这个表单的提交方式设置为 Post 方式,用户在提交表单的时候,将填写的数据提交到服务器,此时调用的是带[HttpPost] 标签的Action。
这样,我们就可以在 Controlller 中提供同名的 Action 来处理用户的编辑操作。这种方式在 ASP.NET MVC 中使用很多。

(10)编辑Edit 方法,如代码10.1

代码10.1

        public ActionResult Edit(int id)
        {
            Album album = db.Album.Find(id);
            return View(album);
        }

(11)将光标放置在 Details 的 Action 方法内,单击鼠标右键,在弹出菜单中选择添加视图


(12)编辑Details方法,如代码12.1

代码12.1

        public ViewResult Details(int id)
        {
            Album album = db.Album.Find(id);
            return View(album);
        }

(13)将光标放置在 Delete的 Action 方法内,单击鼠标右键,在弹出菜单中选择添加视图


(14)编辑Details方法,如代码14.1

代码14.1

        public ActionResult Delete(int id)
        {
            Album album = db.Album.Find(id);
            return View(album);
        }

(15)现在,可以运行一下了,访问 /StoreManager可以得到如下的结果。


(16)点击“Edit”超链接


(17)点击“Details”超链接


(18)点击“Delete”超链接


(19)至此用Get方式请求的编辑,详细,删除页面都完成了,后面我们将要说说用Post方式将编辑和删除的内容提交到数据库的操作。



抱歉!评论已关闭.