MVC架構學習

做爲一名小小的GreenBird,學習MVC呢,已經花費了2天了,期間獲得了美麗的學姐的幫助,初步整理了一下。html

首先,學習MVC呢就先以一個標準的MVC的簡單的例子來入手,而後根據學姐的PPT,我用vs2012創建了一個項目。數據庫

1.創建一個MVC架構的項目:瀏覽器

File->New Project->Visual C#->ASP.NET MVC 4 Web Application架構

能夠直接運行這個網站mvc

2.Adding a Controllerasp.net

右鍵單擊Controller->add->Controller(CommentControler)函數

public string Index()學習

        {網站

            return "This is my first test of <b>MVC</b>...";url

        }

把原來的Index方法能夠註釋掉。

3.在RouteConfig.cs裏面有路由規則。

routes.MapRoute(

                name: "Default",

                url: "{controller}/{action}/{id}",

                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

            );

能夠試驗一下這個路由規則:

在新建的CommentControler裏新定義一個action以下:

public string Welcome(string name, int numTimes = 1)

        {

            return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);

        }

而後在瀏覽器上面

也能夠改變一下路由規則:

routes.MapRoute(

                name: "Cathy",

                url: "{controller}/{action}/{name}/{id}"

                );

改變一下Comment裏面的action:

public string Welcome(string name, int ID = 1)

        {

            return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);

        }

4.Add a folder View|Comment

引用:Layout = "~/Views/Shared/_Layout.cshtml";(能夠在Share裏面的要引用的東西直接拖過來稍微修改一下就能夠了)

Index裏面的內容是這個樣子的:

@{

    ViewBag.Title = "Easy";

    Layout = "~/Views/Shared/_Layout.cshtml";

}

<h2>Practice of *Comments</h2>

5.修改CommentController裏面的內容,

public ActionResult Index()

        {

            return View();

        }

把此註釋去掉。

6.在Share的公共模板裏面修改界面的格式,menu裏面增長一個超連接的文字。

(能夠輸入函數名稱,把鼠標放在上面看下面的參數應該怎麼寫)

<li>@Html.ActionLink("Easy", "Index", "Comment")</li>

7.Adding a Model:Comment.cs

using System;

using System.Data.Entity;

using System.Web;

using System.ComponentModel.DataAnnotations;

using System.ComponentModel.DataAnnotations.Schema;

namespace Practice.Models

{

    public class Comment

    {

        [Key]

        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]

        public int CommentID { get; set; }

        public DateTime CommentTime { get; set; }

        public string CommnetUser { get; set; }

        public string CommenContent { get; set; }

        public int ParentCommentID { get; set; }

}

}

8.在Models 裏面的另外的cs文件中尋找Dbcontext,並寫入:

public DbSet<Comment> Comments { get; set; }

9.在菜單欄裏面找到tools->libraries package manager->package manager console

分別輸入下面的命令:

Enable-Migrations//會在工程裏面自動生成一個Migrations文件

Add-Migration Create_DB_DIY(本身定義的,可是沒有間隔)

Update-Database

這樣就在vs裏面建立了一個數據庫,裏面有兩張表,能夠在View->Server Explore裏面找到tables,有兩張表:

能夠右擊表,New Query,新建查詢

10.設計Easy超連接的頁面Index.cshtml

<div>

    <div>

        <table>

            <tr>

                <td>

                    <div>

                        <div style="color: blue">CommnetUser</div>

                        <div>CommenContent</div>

                        <div style="color: gray; font-size: 10px;">CommentTime</div>

                    </div>

                </td>

                <td>

                    <div>

                        <input id="delete-button" type="submit" value="Delete" />

                    </div>

                </td>

            </tr>

        </table>

    </div>

    <div>

        <div>

            <input name="commentUser" type="text" placeholder="User Name..." />

        </div>

        <div>

            <textarea name="commentContent" rows="5"></textarea>

        </div>

        <div>

            <input id="submit-button" type="submit" value="Submit" />

        </div>

    </div>

</div>

到了這個地方,咱們就能夠獲得顯示的頁面了,可是這個時候還不能與數據庫鏈接,須要新建Controller來控制與數據庫的交互。

11.新建Controller:BaseController.cs增長內容:

public UsersContext db = new UsersContext();

另外爲了和數據庫進行交互,還需包含下面的using System.Web.Mvc;

using MVC4.Models;

12.修改CommentController.cs

using CommentSample.Models;

Change Controller into BaseController

 public ActionResult Index()
        {
            var comments = db.Comments.OrderByDescending(c => c.CommentTime).ToList();
            return View(comments);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult CommentFunction(string commentUser, string commentContent)
        {
            if (commentUser != null && commentContent != null)
            {
                db.Comments.Add(new Comment { CommentTime = DateTime.Now, CommnetUser = commentUser, CommenContent = commentContent, ParentCommentID = 0 });
                db.SaveChanges();
            }
            return RedirectToAction("Index", "Comment");
        }

    [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteFunction(int commentId)
        {
            var comment = db.Comments.SingleOrDefault(c => c.CommentID == commentId);
            if (comment != null)
            {
                db.Comments.Remove(comment);
                db.SaveChanges();
            }
            return RedirectToAction("Index", "Comment");
        }

    }

13.修改Comment/Index.cshtml:

@model List<MVC4.Models.Comment>
@using MVC4.Models
@{
    ViewBag.Title = "Easy";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div>
    <div>
        <table>
            @foreach (var comment in Model.Where(c => c.ParentCommentID == 0))
            {
                <tr>
                    <td>
                        <div>
                            <div style="color: blue">@comment.CommnetUser</div>
                            <div>@comment.CommenContent</div>
                            <div style="color: gray; font-size: 10px;">@comment.CommentTime</div>
                        </div>
                    </td>
                    <td>
                        @using (Html.BeginForm("DeleteFunction", "Comment", "FormMethod.Post"))
                        {
                            @Html.AntiForgeryToken()
                            @Html.Hidden("commentId",comment.CommentID)
                            <div>
                                <input id="delete-button" type="submit" value="Delete" />
                            </div>
                        }
                    </td>
                </tr>
            }
        </table>
    </div>
    @using (Html.BeginForm("CommentFunction", "Comment", FormMethod.Post))
    {
        @Html.AntiForgeryToken()//防止CSRS攻擊
        <div>
            <div>
                <input name="commentUser" type="text" placeholder="User Name..." />
            </div>
            <div>
                <textarea name="commentContent" rows="5"></textarea>
            </div>
            <div>
                <input id="submit-button" type="submit" value="Submit" />
            </div>
        </div>
    }

</div>

 這樣的話就創建了一個簡單的留言簿。能夠輸入評論人的名字,評論內容,提交後顯示在頁面上,頁面上的每一個評論均可以刪除。

期間出現了問題:

The resource cannot be found.

下面的網址提供瞭解決方案:

http://cephas.net/blog/2005/07/14/aspnet-the-resource-cannot-be-found/

可是這個對於我來講好像並無什麼用處,Fiona學姐給我解決了這個問題,就是我沒有把CSRS攻防的方法放在正確的位置上。

每一個增刪數據的方法對應於Controller.cs裏面的一個方法,該方法上面要加上相應的防止CSRS攻防的語句。同時,在View裏利用@來定義一個Action裏所對應的模型,這樣就能夠直接在cshtml文件中調用「Model」變量。 Model實際上是一個類庫,封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法,它能夠直接訪問數據庫。對於一個事件,Controller首先會根據這個事件做出相應的處理,去改變View或Model。

下面是引用的一個博客的文章的一段:

原文地址:(http://blog.csdn.net/qinkeliangqin/article/details/27084639

MVC網站的訪問流程:

1. 當第一個請求從客戶端發起的時候,首先執行的是Global.asax中的Application_Start()方法來完成一些初始化工做,其中重要的一步是RegisterRoutes方法,這個方法指定了如何將url映射到具體的方法上,稍後詳解。

2. 根據第一步中指定的映射表生成一個RouteData對象,利用這個對象來建立一個RequestContext對象。

3. MvcRouteHandler建立一個MvcHandler,並將RequestContext對象傳給MvcHandler。

4. MvcHandler對象利用RequestContext對象肯定一個IControllerFactory對象來建立Controller對象。

5. MvcHandler對象調用Controller對象的Execute()方法。

6. Controller的ControolerActionInvoker對象決定調用controller的哪一個具體的action方法。

7. Action方法接受用戶參數,執行方法,返回一個Result類型的對象。

 

注:其實還有不少問題沒有搞清楚,之後接觸的過程當中會繼續學習~~

參考文獻:

http://www.cnblogs.com/zgqys1980/archive/2012/08/17/2643572.html

http://blog.csdn.net/qinkeliangqin/article/details/27084639

相關文章
相關標籤/搜索