asp.net-mvc – 在回发数据时,MVC如何填充模型
发布时间:2020-12-16 06:38:17 所属栏目:asp.Net 来源:网络整理
导读:MVC非常清楚如何将数据发送到浏览器.您转到URL,它运行代码以创建模型,将该类型的模型传递到视图中,然后根据模型的状态呈现 HTML. 然而,当用户在页面上提交表单时,我没有发现这么清楚,MVC如何将表单发布回模型以便在控制器中使用? 我猜测魔法发生在某处: @H
MVC非常清楚如何将数据发送到浏览器.您转到URL,它运行代码以创建模型,将该类型的模型传递到视图中,然后根据模型的状态呈现
HTML.
然而,当用户在页面上提交表单时,我没有发现这么清楚,MVC如何将表单发布回模型以便在控制器中使用? 我猜测魔法发生在某处: @Html.EditorFor(model => model.Title) 但我不明白为什么…… 我正在关注Getting started with ASP.NET MVC 3.以下代码来自哪里以便于参考. 控制器: public ActionResult Edit(int id) { Movie movie = db.Movies.Find(id); return View(movie); } [HttpPost] public ActionResult Edit(Movie movie) { if (ModelState.IsValid) { db.Entry(movie).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(movie); } 视图: @model MvcMovie.Models.Movie @{ ViewBag.Title = "Edit"; } <h2>Edit</h2> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Movie</legend> @Html.HiddenFor(model => model.ID) <div class="editor-label"> @Html.LabelFor(model => model.Title) </div> <div class="editor-field"> @Html.EditorFor(model => model.Title) @Html.ValidationMessageFor(model => model.Title) </div> <div class="editor-label"> @Html.LabelFor(model => model.ReleaseDate) </div> <div class="editor-field"> @Html.EditorFor(model => model.ReleaseDate) @Html.ValidationMessageFor(model => model.ReleaseDate) </div> <div class="editor-label"> @Html.LabelFor(model => model.Genre) </div> <div class="editor-field"> @Html.EditorFor(model => model.Genre) @Html.ValidationMessageFor(model => model.Genre) </div> <div class="editor-label"> @Html.LabelFor(model => model.Price) </div> <div class="editor-field"> @Html.EditorFor(model => model.Price) @Html.ValidationMessageFor(model => model.Price) </div> <p> <input type="submit" value="Save" /> </p> </fieldset> } <div> @Html.ActionLink("Back to List","Index") </div> 哪个产生: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Edit</title> <link href="/Content/Site.css" rel="stylesheet" type="text/css" /> <script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script> <script src="/Scripts/modernizr-1.7.min.js" type="text/javascript"></script> </head> <body> <div class="page"> <header> <div id="title"> <h1>MVC Movie App</h1> </div> ... </header> <section id="main"> <h2>Edit</h2> <script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script> <script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script> <form action="/Movies/Edit/4" method="post"> <fieldset> <legend>Movie</legend> <input data-val="true" data-val-number="The field ID must be a number." data-val-required="The ID field is required." id="ID" name="ID" type="hidden" value="4" /> <div class="editor-label"> <label for="Title">Title</label> </div> <div class="editor-field"> <input class="text-box single-line" id="Title" name="Title" type="text" value="Rio Bravo" /> <span class="field-validation-valid" data-valmsg-for="Title" data-valmsg-replace="true"></span> </div> <div class="editor-label"> <label for="ReleaseDate">ReleaseDate</label> </div> <div class="editor-field"> <input class="text-box single-line" data-val="true" data-val-required="The ReleaseDate field is required." id="ReleaseDate" name="ReleaseDate" type="text" value="4/15/1959 12:00:00 AM" /> <span class="field-validation-valid" data-valmsg-for="ReleaseDate" data-valmsg-replace="true"></span> </div> <div class="editor-label"> <label for="Genre">Genre</label> </div> <div class="editor-field"> <input class="text-box single-line" id="Genre" name="Genre" type="text" value="Western" /> <span class="field-validation-valid" data-valmsg-for="Genre" data-valmsg-replace="true"></span> </div> <div class="editor-label"> <label for="Price">Price</label> </div> <div class="editor-field"> <input class="text-box single-line" data-val="true" data-val-number="The field Price must be a number." data-val-required="The Price field is required." id="Price" name="Price" type="text" value="9.99" /> <span class="field-validation-valid" data-valmsg-for="Price" data-valmsg-replace="true"></span> </div> <p> <input type="submit" value="Save" /> </p> </fieldset> </form> <div> <a href="/Movies">Back to List</a> </div> </section> <footer> </footer> </div> </body> </html> 解决方法
MVC只是将模型的公共属性与同名FormsCollection对象中的值进行匹配.如果存在名称和类型匹配,则会创建模型的实例,并将值复制到这些属性中.
此过程称为模型绑定,您可以创建自定义模型绑定器. 虽然EditorFor使用的模板确保以模型绑定器可以理解的方式命名表单输入,但该过程与EditorFor没有直接关系. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 只读一个下拉列表,但仍然提交其值
- asp.net – 为什么在IIS已经处理请求并发时使用异步控制器?
- asp-classic – 经典ASP中500 Vs 500.100错误
- asp.net-mvc – asp.net mvc中HttpUnauthorizedResult上的默
- asp.net-mvc – 如何从视图中检索传递给我的自定义EditorFo
- .net – ASP MVC HTML Helpers – 好还是坏?
- asp.net – 在资源文件中存储SQL查询是不好的做法吗?
- asp.net – FederatedAuthentication.WSFederationAuthenti
- asp.net – gridview编辑需要单击两次
- asp.net-web-api – 请求的资源不支持http方法“PUT”