ASP.NET MVC示例(一)

  • A+
所属分类:C#.NET 编程技术

完善数据注解

ASP.NET MVC示例(一)

我们需要更多的数据注解,来限制各个属性,以及提供显示用的名称(而不是英文字符串):

public class Student
{
       public int ID { get; set; }
 
       [Display(Name = "姓名")]
       [Required]
       [StringLength(200, MinimumLength = 2)]
       public string Name { get; set; }
       
       [Display(Name = "性别")]
       [Required]
       [Range(0, 1)]
       public int Gender { get; set; }
 
 
       [Display(Name = "所学专业")]
       [Required]
       [StringLength(200)]
       public string Major { get; set; }
 
 
       [Display(Name = "入学日期")]
       [DataType(DataType.Date)]
       [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
       public DateTime EntranceDate { get; set; }
}

再次运行,表格页面效果:

ASP.NET MVC示例(一)

完善性别的显示

表格页面-性别列显示为中文

这个比较简单,将原来的:

@Html.DisplayFor(modelItem => item.Gender)

修改为:

@if (item.Gender == 1)
{
       @:男
} else
{
       @:女
}

新建编辑页面-性别显示为下拉列表

原来的编辑页面:

ASP.NET MVC示例(一)

性别字段的编辑框是通过如下方式生成的:

@Html.EditorFor(model => model.EntranceDate, new { htmlAttributes = new { @class = "form-control" } })

Html辅助方法EditorFor会查看模型属性的类型,自动生成对应的表单输入框。由于性别字段是整形,所以这里默认会生成一个数字输入框。

 

为了更加友好的显示,我们将性别改为下拉列表,并且仅允许用户从下拉项中选择。首先我们需要准备下拉列表选项的集合,并通过控制器传递给视图使用:

 

定义获取性别集合的函数,由于需要多个地方使用,所以提取成一个公共方法:

private List<SelectListItem> GetGenderList()
{
       return new List<SelectListItem>() {
              new SelectListItem
              {
                     Text = "男",
                     Value = "1"
              },new SelectListItem
              {
                     Text = "女",
                     Value = "0"
              }
       };
}

通过ViewBag.GenderList传入视图:

// GET: Students/Edit/5
public ActionResult Edit(int? id)
{
       if (id == null)
       {
              return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
       }
       Student student = db.Students.Find(id);
       if (student == null)
       {
              return HttpNotFound();
       }
 
       ViewBag.GenderList = GetGenderList();
       return View(student);
}

视图中通过DropDownListFor强类型辅助方法,来显示下拉列表以及选中项:

@Html.DropDownListFor(model => model.Gender,
ViewBag.GenderList as IEnumerable<SelectListItem>, new { @class = "form-control" })

ASP.NET MVC示例(一)

表单提交时的代码和之前一样,多了一个对GetGenderList的调用:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ID,Name,Gender,Major,EntranceDate")] Student student)
{
       if (ModelState.IsValid)
       {
              db.Entry(student).State = EntityState.Modified;
              db.SaveChanges();
              return RedirectToAction("Index");
       }
 
       ViewBag.GenderList = GetGenderList();
       return View(student);
}

这一点非常重要,虽然正常的提交操作不会再次返回当前视图(RedirectToAction直接指定了页面跳转),但是在模型绑定失败时(尝试禁用JavaScript,姓名留空,然后提交表单),如果不重新设置ViewBag.GenderList参数就会出错:

ASP.NET MVC示例(一)

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: