MVC数据传递和视图母版页(理论)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.5 通过FormCollection读取表单数据 通过 读取表单数据
[public ActionResult Edit(int id,FormCollection collection) 可以使用传入的FormCollection集合读取数据 [AcceptVerbs(HttpVerbs.Post)] { public ActionResult Create(FormCollection collection) 在ASP.NET MVC项目中,通过FormCollerction可以读取表单中指定 using (TopicsDataContext db = new TopicsDataContext()) { 的数据,借助控制器中的UpdateModel()方法或者TryUpdateModel() { using (TopicsDataContext db = new TopicsDataContext()) 方法,可以非常方便地对数据对象中相关属性的数据进行更新 try { { Topics topics = new Topics(); var topic = db.Topics.SingleOrDefault(t => t.id == id); topics.id = -1; UpdateModel(topic, collection.ToValueProvider()); topics.title = collection["title"]; db.SubmitChanges(); topics.publishdate = Convert.ToDateTime(collection["publishdate"]); return RedirectToAction("Index"); topics.typeid = Convert.ToInt32(collection["types"]); } topics.content = collection["content"]; catch db.Topics.InsertOnSubmit(topics); { db.SubmitChanges(); return View(); return RedirectToAction("Index"); } } } } }
使用TempData传递数据 传递数据 使用
ViewData与TempData时完全不同的数据类型
ViewData的数据类型是ViewDataDictionary类的实例化对象 TempData得数据类型则是TempDataDictionary类的实例化对象
ViewData只能在一个动作方法中设置,在相关的视图页面中读取,只 对当前的视图页面有效 TempData则可以再多个方法动作方法中或者多个页面中设置、读取 TempData实保存在Session中,控制器每次执行请求时都会从Session 中获取TempData数据并删除该Session TempData数据只能在控制器中传递一次,其中的每个元素也只能被访 问一次,访问之后会被自动删除
1.2 使用 使用TempData传递数据 传递数据
根据ControllerBase类中的TempData属性,同样可以再控制器中的相 关动作方法中设置该TempData属性的值
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" namespace MvcApplication1.Controllers Inherits="System.Web.Mvc.ViewPage" %> { [HandleError] <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> public class HomeController : Controller UseTempData { </asp:Content> public ActionResult UseTempData() { <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> TempData["message"] = "使用TempData传递数据"; TempData["person"] = new Person { FirstName = "贝拉克", LastName = "奥巴马" }; <h2><%=TempData["message"] %></h2> return View(); <% MvcApplication1.Models.Person person = TempData["person"] as } MvcApplication1.Models.Person; %> } 第44届美国总统是:<%=person.FirstName %>.<%=person.LastName %> } </asp:Content>
第4章 数据传递和视图母版页 章
பைடு நூலகம்
本章内容
视图和控制器之间的数据传递 使用视图母版页 使用视图用户控件
本章目标
掌握视图和控制器之间的数据传递 创建和使用视图母版页 创建和使用视图用户控件
1. 视图和控制器之间的数据传递
在ASP.NET MVC框架中,控制器与视图之间的数据传递包括两个方向, 一个将控制器设置的数据传递到视图中,然后在视图中显示这些数据; 另一个是将视图中的数据传递到控制器中,在控制器中读取、处理这些 数据。 控制器向视图传递数据
在ASP.NET MVC框架中,所以得控制器必须继承Controller类,而 Controller类又是ControllerBase的子类。根据ControllerBase类中的 ViewData属性,可以在控制器中的相关动作方法中设置该视图数据字 典(ViewDataDictionary)的值
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" namespace MvcApplication1.Controllers Inherits="System.Web.Mvc.ViewPage" %> { [HandleError] <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> public class HomeController : Controller UserViewData { </asp:Content> public ActionResult UseViewData() { <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> ViewData["message"] = "使用ViewData传递数据"; ViewData["person"] = new Person { FirstName = "贝拉克", LastName = "奥巴马" }; <h2><%=ViewData["message"] %></h2> return View(); <% MvcApplication1.Models.Person person = ViewData["person"] as } MvcApplication1.Models.Person; %> } 第44届美国总统是:<%=person.FirstName %>.<%=person.LastName %> } </asp:Content>
1.4 通过 通过Request.Form读取表单数据 读取表单数据
在Post方法提交的表单在控制器动作方法(Action)中可以使用 Request.Form来读取其中的数据
<% using (Html.BeginForm()) {%> [AcceptVerbs(HttpVerbs.Post)] <fieldset> public ActionResult Create() <legend>新闻</legend> { <p> using (TopicsDataContext db = new TopicsDataContext()) <label for="title">标题:</label> { <%= Html.TextBox("title") %> Topics topics = new Topics(); </p> topics.id = -1; <p> topics.title = Request.Form["title"]; <label for="publishdate">发表日期:</label> topics.publishdate = Convert.ToDateTime(Request.Form["publishdate"]); <%= Html.TextBox("publishdate") %> topics.typeid = Convert.ToInt32(Request.Form["types"]); </p> topics.content = Request.Form["content"]; ... db.Topics.InsertOnSubmit(topics); </p> <p> db.SubmitChanges(); <input type="submit" value="发布新闻" /> return RedirectToAction("Index"); </p> } </fieldset> } <% } %>
使用ViewData传递数据 使用TempData传递数据 使用Model传递数据
控制器读取视图表单中的数据
通过Request.Form读取表单数据 通过FormCollection读取表单数据 通过模型绑定(Model Binder)读取表单数据
1.1 使用 使用ViewData传递数据 传递数据
1.3 使用 使用Model传递数据 传递数据
当在控制器View()方法中,传递实例化对象时,控制器就会将 ViewDataDictionary类的实例化对象的Model属性设置为需要被传递的 对象;在视图中,只需要读取ViewPage类中的Model属性,就可以获 得控制器中所设置的实例化对象
namespace MvcApplication1.Controllers { <%@ Page Title="" Language="C#" [HandleError] MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Person>" %> public class HomeController : Controller <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> { publicUseModel ActionResult UseModel() </asp:Content> { <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">}; Person person = new Person { FirstName = "贝拉克", LastName = "奥巴马" <h2>UseModel</h2> return View(person); 第44届美国总统是:<%=Model.FirstName %>.<%=Model.LastName %> } </asp:Content> } }
相关文档
最新文档