MVC进阶篇(四)——[HttpGet]和[HttpPost]

前言

  Getpost,一个获取请求,一个提交请求,在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方法,获取请求条件,然后得到要请求的部分。

 

感谢您的宝贵时间···

转载于:https://www.cnblogs.com/zhoulitong/p/6412317.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值