前言
Get和post,一个获取请求,一个提交请求,在MVC里面用法也很特别,总结一下,我理解的不是特别深刻,希望多多交流。
内容
[HttpGet]
需求:
用户想要通过点击修改按钮来达到修改这部分内容的效果。
分析:
点击修改按钮,获取这个请求,然后显示相应的修改内容。
Demo
View部分
@*跳转链接,a.UserID为请求条件*@ <a href="/Home/Modify/@a.UserID">修改</a>
Controller部分
[HttpGet] public ActionResult Modify(string id) { //1.根据id查询数据集,返回的集合汇总,拿到第一个实体对象 T_User userd = (from a in db.T_User where a.UserID == id select a).FirstOrDefault(); //2.生成用户级别 IEnumerable<SelectListItem> listitem = (from c in db.T_User where c.Computer == "ZLT" select c).ToList() .Select(c => new SelectListItem { Value = c.UserID.ToString(), Text = c.Level }).ToList(); //将生成的文章分类,下拉框选项集合,设置给viewbag ViewBag.level = listitem; //2.将userd传递给显示 //*“加载”视图使用view的构造函数,将数据传递给实体上的名为Model的属性 return View(userd); }
Model部分
这部分采用的是EF映射过来的数据表,进行部分数据操作,里就不详细解说了。
[HttpPost]
需求:
用户想将上面修改的内容,进行提交,然后保存。
分析:
点击提交按钮,然后提交请求,完成提交。
Demo
View部分
@using (Html.BeginForm("Modify", "Home", FormMethod.Post)) { <table id="tblist"> <tr> <td colspan="2">修改</td> </tr> <tr> <td>标题:</td> @*<td>@Html.TextBox("txtName",(object)Model.T_User)</td>*@ <!--使用htmlhelper的强类型方法直接从model中根据userID属性生成文本框--> <td>@Html.TextBoxFor(a => a.UserID)</td> </tr> <tr> <td>级别:</td> <!--使用强类型方法生成下拉框,并自动根据model属性里面的level值,设置下拉框的默认选项--> <td>@Html.DropDownListFor(a=>a.Level,ViewBag.level as IEnumerable<SelectListItem>)</td> </tr> <tr> <td>内容</td> @*<td>@Html.TextBox("txtName",(object)Model.UserID)</td>*@ <!--使用htmlhelper的强类型方法直接从model中根据userName属性生成文本框--> <td>@Html.TextAreaFor(a=>a.UserName,10,60,null)</td> </tr> <tr> <td colspan="2"><input type="submit" value="确定修改" />@Html.ActionLink("返回","Index","Home")</td> </tr> </table> }
Controller部分
[HttpPost] public ActionResult Modify(T_User model) { try { //1.将实体对象加入EF对象容器中,并获取伪包装类 DbEntityEntry<T_User> entry = db.Entry<T_User>(model); //2.将包装类对象的状态设置为unchanged entry.State = System.Data.EntityState.Unchanged; //3.设置被改变的属性 entry.Property(a => a.UserID).IsModified = true; entry.Property(a => a.UserName).IsModified = true; entry.Property(a => a.Level).IsModified = true; //4.提交到数据库,完成修改 db.SaveChanges(); //5.更新成功,则命令浏览器重定向到/Home/List方法 return RedirectToAction("Index", "Home"); } catch (Exception ex) { return Content("更新失败!" + ex.Message); } }
Model部分
同样采用EF映射过来的数据表,略。
注意:可以发现,当post和get方式不同的时候,在同一个控制器下面,可以有相同的action名。
效果图
小结
Post方法提交的一定是整个表单,一个实体数据,得到提交的结果。Get方法,获取请求条件,然后得到要请求的部分。
感谢您的宝贵时间···