正式学习MVC 03

1、View -> Controller的数据通信

1) 通过url查询字符串

        public ActionResult Index(string user)
        {

            return Content(user);
        }

 

2)通过post方式传递

 

 1     ViewBag.Title = "ShowForm";
 2 }
 3 
 4 <h2>ShowFormh2>
 5 
 6 <p>your form data will be deliver to Indexp>
 7 
 8 <form action="/Demo/Index" method="post">
 9     <input type="text" name="user" value="" />
10     <input type="submit" name="" value="提交" />
11 form>

 

        public ActionResult Index(string user)
        {

            return Content(user);
        }

 

 

 1         public ActionResult Index(string user)
 2         {
 3 
 4             return Content(user);
 5         }
 6         public ActionResult ShowForm(string user)
 7         {
 8 
 9             return View();
10         }

 

如果需要指定请求方式,可通过设置属性来指定

        [HttpGet]
        public ActionResult Index(string user)
        {

            return Content(user);
        }

将无法响应post请求

建议不用参数列表,直接将所需参数整合为一个类作为参数

       public ActionResult Index(Models.Student model)
        {

            // code

        }

推荐这么写的原因还有可以设置Model属性

需要引用:

using System.ComponentModel.DataAnnotations;

using System.ComponentModel.DataAnnotations;

namespace MVCStudy.Models
{
    public class Student
    {
        [Required]
        public int Id { get; set; }
        [Required,StringLength(maximumLength:12,MinimumLength = 2)]
        public string Name { get; set; }

    }
}

并在controller进行校验

        public ActionResult Index(Models.Student model)
        {
            if (!ModelState.IsValid)
            {
                return Content("your data is not right");
            }
            return Content(model.Name);
        }

如果想在视图页面进行提示。可以右键Controller内的相应方法新建视图:

正式学习MVC 03_第1张图片

设置好模型类,将会自动生成前端校验的视图(强类型视图)

此时分别编写get和post请求的controller:

        [HttpGet]
        public ActionResult Index()
        {
            return View();
        }
        // GET: Demo
        [HttpPost]
        public ActionResult Index(Models.Student model)
        {
            if (!ModelState.IsValid)
            {
                return Content("your data is not right");
            }
            return Content(model.Name);
        }

 

2、讲解上述自动生成的视图页面

1)BeginForm

类似form标签,默认的Action为当前页面

@model MVCStudy.Models.Animal

@{
    ViewBag.Title = "Index";
}

Index

@using (Html.BeginForm()) { @Html.AntiForgeryToken()
class="form-horizontal">

Animal


@Html.ValidationSummary(true, "", new { @class = "text-danger" })
class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
class="col-md-10"> @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
class="form-group"> @Html.LabelFor(model => model.Sex, htmlAttributes: new { @class = "control-label col-md-2" })
class="col-md-10"> @Html.EditorFor(model => model.Sex, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Sex, "", new { @class = "text-danger" })
class="form-group">
class="col-md-offset-2 col-md-10"> "submit" value="Create" class="btn btn-default" />
}
@Html.ActionLink("Back to List", "Index")
@section Scripts { @Scripts.Render("~/bundles/jqueryval") }

BeginForm方法参数

actionName 方法名

controllerName 上述action对应的控制器名

routeValues 路由值

FormMethod 提交时请求方式

htmlAttribute html标签内的属性

 

Label EditorFor

LabelFor 文字的修改,在Model内可以修改

设置数据的显示方式(DataType)

    public class Animal
    {
        [Required]
      [DataType(DataType.Password)] [Display(Name
= "动物名称")] public string Name { get; set; } [Required] [Display(Name = "性别")] public string Sex { get; set; } }

[EmailAddress] 邮箱校验

自定义字段输入错误信息:[EmailAddress(ErrorMessage="XXXXX")] ()

登录一般使用create的模板

 

②AntiForgeryToken

防止页面被改造,表现为一个Inpuit的隐藏域,

被改造或伪造的页面无法提交数据,使用时还要在controller里写

 

       [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Index(Models.Animal model)
        {
            if (!ModelState.IsValid)
            {
                return Content("your data is not right");
            }
            return Content(model.Name);
        }

 

③ ValidationSummary

呈现错误信息:

在Controller内设置

       [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Index(Models.Animal model)
        {
            if (!ModelState.IsValid)
            {
                ModelState.AddModelError(key:"",errorMessage:"wrong data")
            }
            return Content(model.Name);
        }

 Controller内设置AddModelError并返回视图

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Index(Models.Animal model)
        {
            if (!ModelState.IsValid)
            {
                ModelState.AddModelError(key: "", errorMessage: "wrong data");
            }else if (model.Name == "Desk")
            {
                ModelState.AddModelError(key: "", errorMessage: "这是桌子不是动物");
                return View(model);
            }
            return Content(model.Name);
        }

效果如下:

正式学习MVC 03_第2张图片

上述红色文字就是ValidationSummary

多个字段错误累积显示

 

⑤htmlAttributes

设置标签的属性

htmlAttributes:new{}

 一般表单页面都有get和post两个请求方式

get 用于显示表单页面

post 处理提交的请求,与数据库交互等等

 

你可能感兴趣的:(正式学习MVC 03)