MVC 中的Model对象

简介:









创建--前台表单数据提交到Controller

@model MVC_plug.Models.Students@{
    ViewBag.Title = "Create";
}<h2>Create</h2>@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)    <fieldset>
        <legend>Students</legend>  
        <div class="editor-label">
            @Html.LabelFor(model => model.Stu_Name)        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Stu_Name)
            @Html.ValidationMessageFor(model => model.Stu_Name)        </div>

参考室友的意见 + 断点,这里 浏览器解析Razor 语法是 将 BeginForm 解析为From表单,对于HTML来说是,是不存在实体类之说的,表单提交的值仅仅是以键值对的方式进行存储后提交到指定的Action中.

1 .在Controller中对应的Action的方法体中 将 Student 作为参数来接收

        [HttpPost]        public ActionResult Create(Students students)
        {            if (ModelState.IsValid)
            {
                db.Students.Add(students);
                db.SaveChanges();                return RedirectToAction("Index");
            }            return View(students);
        }

既然View中不存在将提交的内容绑定到 实体类中,那么输入的数据为什么在Action的参数Student中可以点出来? 实际上 View 中Post提交的数据 是以键值对的方式进行存储,然后映射到提交的Action中的 Student中,前提是 View中的键名(Name名字)必须要等于 实体类型的属性名,否则无法映射 

2.在Controller中对应的Action的方法体中直接设置参数来接收值 ()

 public ActionResult Create(string Stu_Name,string Tel,string phone)

运行项目,其中Stu_Name、Tel 有值,phone 无值,当然这只是佐证,如果在前台的View 中设置的名字不一样,后台用Student去接收,同样也会得到空值。

后台传递数据到前台

1. 显示某数据列表 ,同样是后台Controller 将 查询的结果 赋值给一个实体类对象,用反射也好,反序也行,再 Return View(实体类); 

    前台最上面要引用 @model 指向实体类 来接收传递的数据,因为是同一个实体,直接映射到前台,最后View 中进行显示即可

2. 当然还可以选择 ViewData 和ViewBag 在后台的Action中赋值,然后在View中接收,关于这两者的比较,这里简单的整理下

    ViewData 的 ViewDataDictionary 是一个特殊的字典类,当在控制器中使用 ViewData["CurrentTime"] = DateTime.Now; 其实是将这个值以键值对的形式进行存储

    ViewBag不再是字典的键值对结构,而是dynamic动态类型,它会在程序运行的时候动态解析

MVC 高级编程中提高两者的区别

①只有当要访问的关键字是一个有效的C#标识符时,ViewBag 才起作用。 

例如,如果在ViewData["Key With Spaces"]中存放一个值,那么就不能使用ViewBag访问。因为这样根本就无法通过编译。

②动态值不能作为一个参数传递给扩展方法。因为C#编译器为了选择正确的扩展方法,在编译时必须知道每一个参数的真正类型。如果其中任何一个参数是动态的,那么就不会通过编译。

例如,这行代码就会编译失败:@Html.TextBox("name",ViewBag.Name)。要使这行代码通过编译有两种方法:第一是使用ViewData["Name"],第二是把ViewBag.Name值转换为一个具体的型:(string)ViewBag.Name 。

说白了,ViewBag 就是在ViewData的升级版,两者只能在Action中起作用,当然,两者的数据是可以相互访问


















本文转自xsster51CTO博客,原文链接:http://blog.51cto.com/12945177/1950802 ,如需转载请自行联系原作者


mvc

相关文章
|
3月前
|
前端开发 JavaScript
MVC中简单数据模型(M): Model类
MVC中简单数据模型(M): Model类
|
5月前
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
|
6月前
|
XML 前端开发 Java
MVC 模式及对象持久化
MVC 模式及对象持久化
68 7
|
JSON 前端开发 Java
《Spring MVC》 第四章 域对象、视图、转发和重定向
《Spring MVC》 第四章 域对象、视图、转发和重定向
98 0
|
前端开发 Java Spring
java202304java学习笔记第六十二天-mvc的请求-spring产生模板对象实现
java202304java学习笔记第六十二天-mvc的请求-spring产生模板对象实现
64 0
|
前端开发 Java Spring
java202304java学习笔记第六十二天-mvc的请求-spring产生模板对象实现(配置文件抽取)
java202304java学习笔记第六十二天-mvc的请求-spring产生模板对象实现(配置文件抽取)
78 0
|
前端开发 Java Spring
java202304java学习笔记第六十二天-mvc的请求-spring产生模板对象实现(配置文件抽取)
java202304java学习笔记第六十二天-mvc的请求-spring产生模板对象实现(配置文件抽取)
66 0
|
前端开发 Java Spring
java202304java学习笔记第六十二天-mvc的请求-spring产生模板对象分析
java202304java学习笔记第六十二天-mvc的请求-spring产生模板对象分析
77 0
|
设计模式 前端开发 安全
Spring MVC-01循序渐进之Model 2和MVC
Spring MVC-01循序渐进之Model 2和MVC
60 0
|
SQL JSON 前端开发
基于Springboot外卖系统08:员工账号状态管理功能+对象转换器+扩展Spring mvc的消息转换器
在员工管理列表页面,可以对某个员工账号进行启用或者禁用操作。账号禁用的员工不能登录系统,启用后的员工可以正常登录。如果某个员工账号状态为正常,则按钮显示为 "禁用",如果员工账号状态为已禁用,则按钮显示为"启用"。
168 0