zoukankan      html  css  js  c++  java
  • VS2010+EF Code First 4.1学习MVC3(三)

    前提:

    htmlHelper 和UrlHelper 类,这是我们在View层进行页面显示组件的常用类或者是唯一类,但是我们又对它了解哪些呢?我们了解为什么可以使用htmlHelper类?因为使用了扩展方法,我们自己是否可以正确的定义一些helper类来满足我们自己的业务需求,对于扩展方法我们又理解多少?htmlHelper类中的那几个方法我们是否完全的掌握?

    今天,我要重点学习的地方是htmlHelper类,有需要的童靴可以一起来哦。

    首先,我要创建两张表,文章表和文章分类

     1 /*文章*/
     2 CREATE TABLE [dbo].[Pt_Article](
     3     [ArticleId] [int] IDENTITY(1,1) NOT NULL,
     4     [ArticleTitle] [nvarchar](300) NOT NULL,
     5     [ArticleSmallTitle] [nvarchar](300) NULL,
     6     [ArticleContent] [text] NULL,
     7     [ArticleCategoryID] [int] NOT NULL,
     8     [ArticleSource] [nvarchar](300) NULL,
     9     [ArticleAuthor] [nvarchar](100) NULL,
    10     [ArticleCreateUserId] [int] NOT NULL,
    11     [ArticleKeywords] [nvarchar](1000) NULL,
    12     [ArticleDescription] [nvarchar](1000) NULL,
    13     [ArticleAbstract] [nvarchar](500) NULL,
    14     [ArticleTagIds] [nvarchar](100) NULL,
    15     [ArticleIsImage] [bit] NULL,
    16     [ArticleImagePath] [nvarchar](200) NULL,
    17     [ArticleCreateTime] [datetime] NOT NULL,
    18     [ArticleUpdateTime] [datetime] NULL,
    19     [ArticleUpdateUserId] [int] NULL,
    20     [ArticleStatus] [int] NOT NULL,
    21  CONSTRAINT [PK_Pt_Article] PRIMARY KEY CLUSTERED 
    22 (
    23     [ArticleId] ASC
    24 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    25 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    26 /*文章类别*/
    27 CREATE TABLE [dbo].[Pt_ArticleCategory](
    28     [CategoryId] [int] IDENTITY(1,1) NOT NULL,
    29     [CategoryName] [nvarchar](200) NOT NULL,
    30     [CategoryDescption] [nvarchar](500) NULL,
    31     [CategoryParentID] [int] NOT NULL,
    32     [CategoryStatus] [int] NOT NULL,
    33  CONSTRAINT [PK_Pt_ArticleCategory] PRIMARY KEY CLUSTERED 
    34 (
    35     [CategoryId] ASC
    36 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    37 ) ON [PRIMARY]
    38 
    39 
    40 GO

    为什么呢,因为文章里面可以用到好多好多的htmlHelper的组件哦~~

    好了,表创建好了,下一步重新生成EF,我们可以从下面看到操作类中有我们新建的对象了

     1     public class MvcCmsContext : DbContext
     2     {
     3         static MvcCmsContext()
     4         { 
     5             Database.SetInitializer<MvcCmsContext>(null);
     6         }
     7 
     8         public DbSet<Pt_Article> Pt_Article { get; set; }
     9         public DbSet<Pt_ArticleCategory> Pt_ArticleCategory { get; set; }
    10         public DbSet<Pt_User> Pt_User { get; set; }
    11 
    12         protected override void OnModelCreating(DbModelBuilder modelBuilder)
    13         {
    14             modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
    15             modelBuilder.Configurations.Add(new Pt_ArticleMap());
    16             modelBuilder.Configurations.Add(new Pt_ArticleCategoryMap());
    17             modelBuilder.Configurations.Add(new Pt_UserMap());
    18         }
    19     }

    我们通过创建Area在后台来管理我们的文章信息哦,如下图

     接下来,我们开始创建新增文章窗体了

    View Code
     1 @model Web.Entities.Pt_Article
     2 @{
     3     ViewBag.Title = "ArticleAdd";
     4     Layout = "~/Areas/Admin/Views/Shared/_AdminLayout.cshtml";
     5 }
     6 <h2>
     7     添加文章</h2>
     8 @*提交到当前页面*@
     9 @using (Html.BeginForm())
    10 {
    11     <div class="editor-label">@Html.LabelFor(a => a.ArticleId)</div>
    12     <div class="editor-field">
    13         @Html.Label("标题:")
    14         @Html.TextBoxFor(a => a.ArticleTitle, new { id = "txtArticleTitle" })
    15     </div>
    16 }

    我们着重看标红的2行:

    生成的HTML代码如下:

    <label for="">标题:</label>
     <input id="txtArticleTitle" name="ArticleTitle" type="text" value="" />

    通过代码比较我们可以看出,我们在文本框自定义的id被添加到了HTML中的ID,所以,我们完全可以想象。

    我们自定义的一些属性就可以通过new{}来定义实现。

    Html.DropDownList显示文章分类

     1 //数据库查询出所有分类
     2         /// <summary>
     3         /// 获取分类列表
     4         /// Created by isaac on 2013-01-28
     5         /// </summary>
     6         private void GetCategoryList()
     7         {
     8             IList<Pt_ArticleCategory> list = new List<Pt_ArticleCategory>();
     9             using (var db = new MvcCmsContext())
    10             {
    11                 list = db.Pt_ArticleCategory.ToList();
    12             }
    13             IList<SelectListItem> categoryList = new List<SelectListItem>();
    14             if (list != null)
    15             {
    16                 categoryList.Add(new SelectListItem { Text = "-----请选择文章类别-----", Value = "0" });
    17                 foreach (var item in list)
    18                 {
    19                     categoryList.Add(new SelectListItem { Text = item.CategoryName, Value = item.CategoryId.ToString() });
    20                 }
    21             }
    22             ViewBag.CategoryList = categoryList;
    23         }
    24 //在页面加载的时候获取
    25         /// <summary>
    26         /// 新增文章
    27         /// </summary>
    28         /// <returns>Created by isaac on 2013-01-24</returns>
    29         public ActionResult ArticleAdd()
    30         {
    31             GetCategoryList();
    32             return View();
    33         }
    34 //View视图显示
    35     <div class="editor-field">
    36         @Html.Label("分类:")
    37         @Html.DropDownList("ddlArticleCategory", (List<SelectListItem>)ViewBag.CategoryList, new { id = "ddlArticleCategory" })
    38     </div>

    HTML代码为

    1     <div class="editor-field">
    2         <label for="">分类:</label>
    3         <select id="ddlArticleCategory" name="ddlArticleCategory"><option value="0">-----请选择文章类别-----</option>
    4 <option value="1">Xiaan News</option>
    5 </select>
    6     </div>

    页面显示:

    Html.RadioButton 显示文章状态

    1 <div class="editor-field">
    2         @Html.Label("文章状态")
    3         @Html.RadioButton("sex", "1", true)正常
    4         @Html.RadioButton("sex", "0", false)禁止
    5     </div>
    View 页面
     1 @model Web.Entities.Pt_Article
     2 @{
     3     ViewBag.Title = "ArticleAdd";
     4     Layout = "~/Areas/Admin/Views/Shared/_AdminLayout.cshtml";
     5 }
     6 <h2>
     7     添加文章</h2>
     8 @*提交到当前页面*@
     9 @using (Html.BeginForm())
    10 {
    11     @Html.AntiForgeryToken("isaac")//阻止CSRF攻击,设置salt
    12     <div class="editor-label">@Html.LabelFor(a => a.ArticleId)</div>
    13     <div class="editor-field">
    14         @Html.Label("标题:")
    15         @Html.TextBoxFor(a => a.ArticleTitle, new { id = "txtArticleTitle" })
    16     </div>
    17     <div class="editor-field">
    18         @Html.Label("分类:")
    19         @Html.DropDownListFor(a => a.ArticleCategoryID, (List<SelectListItem>)ViewBag.CategoryList)
    20     </div>
    21     <div class="editor-field">
    22         @Html.Label("文章状态:")
    23         @Html.RadioButtonFor(a => a.ArticleStatus, true)正常
    24         @Html.RadioButtonFor(a => a.ArticleStatus, false)禁止
    25     </div>
    26     <div class="editor-field">
    27         @Html.Label("文章关键词:")
    28         @Html.CheckBox("keywords", true, new { id = "cbKeywods1" })关键词
    29         @Html.CheckBox("keywords", true, new { id = "cbKeywods2" })关键词2
    30     </div>
    31     <div class="editor-field">
    32         @Html.Label("文章描述:")
    33         @Html.TextAreaFor(a => a.ArticleDescription, new { id = "txtArticleDescription" })
    34     </div>
    35     <div class="editor-field">
    36         <input id="btnSubmit" type="submit" value="Submit" />
    37     </div>
    38 }
    39 <div>
    40     @Html.ActionLink("返回列表", "Article/ArticleList", new { area = "admin" })
    41 </div>
     1         /// <summary>
     2         /// 文章插入
     3         /// Created by isaac on 2013-01-28
     4         /// </summary>
     5         /// <param name="model"></param>
     6         /// <returns></returns>
     7         /// CSRF只支持POST提交
     8         /// 阻止CSRF攻击,设置salt,View里面的salt令牌必须一致
     9         [ValidateAntiForgeryToken(Salt = "isaac")]
    10         [HttpPost]
    11         public ActionResult ArticleAdd(Pt_Article model)
    12         {
    13             using (var db = new MvcCmsContext())
    14             {
    15                 model.ArticleCreateUserId = 1;
    16                 model.ArticleCreateTime = DateTime.Now;
    17                 db.Pt_Article.Add(model);
    18                 db.SaveChanges();
    19             }
    20             return View();
    21         }

    下面我们就能看到列表页面多了一条数据了哦~~,这里我们只是用到了HTMLHelper里面,我们最常用的一些表单元素,下一节我们再深入的了解HTMLHelper,现在你就已经可以做一个网站内容添加页面了~~

    txtArticleDescription

  • 相关阅读:
    十分钟内学会:将HTML格式化为合法的XML
    十分钟内学会:根据数据库生成站点导航
    Adobe Apollo vs Joyeur Slingshot
    英语阅读推荐:你真的懂UPDATE语句吗 & 当有layout之时
    欲练 CSS ,必先宫 IE
    英语阅读推荐:海明威写作技巧 & UpdatePanel为何失灵
    英语阅读推荐:在AJAX中制作自定义验证服务 & 优秀网站的5个因素
    Code is Configuration
    十分钟内学会:自动识别GB2312与UTF8编码的文件
    学习 Ruby on Rails 真的很爽!
  • 原文地址:https://www.cnblogs.com/zhangpan1244/p/2875139.html
Copyright © 2011-2022 走看看