DynamicData for Asp.net Mvc留言本实例下篇:更新


我并不打算再建一个edit页来实现更新,而打算用现有的create页来实现更新功能

  虽然也许这样并不符合其语义,但我仍想这么做,因为asp那时候大家都是把增删改查放在一个页面的只用参数来区别

  如:

article?m=add 
article?m=modfiy 
article?m=delete

  由于控件的流行,细节被Asp.net隐匿了起来,很多朋友不再通过QueryString或隐藏表单来控制功能,或者未接触过Asp的朋友从来也没有想过这么做,因为GridView等控件提供了增删功能.

  但是Asp.net Mvc下我们是否应该重新认识一下这种些基础的东西呢

  因为一个朋友刚刚问了我一个关于通过QueryString来区分Add/Edit的问题,所以感触挺多,啰嗦几句,大家见谅

  而我这里为了不破坏前面所讲的结构所以只能将错就错一下,为Create添加一个id的可空参数,如果id为空即为添加,如果有id的值传过来就是编辑

  OK开动.

  首先在列表中先加一个修改的连接

<!--显示列表开始--> 
 <%foreach (var a in ViewData.Model) { %> 
 <fieldset> 
 <legend> 
  <% Html.RenderDynamicField(a, "Title"); %></legend> 
//.... 
    <%=Html.ActionLink("修改","Create",new{id=a.ID},null) %> 
 </fieldset> 
 <% } %>

  这里我们将id传了过去

  在create页我们将view修改一下:

<form method="post"> 
        <% 
       Html.RenderDynamicEntity("art", ViewData.Model 
                    , 
                    ViewData.Model == null ? DataBoundControlMode.Insert : DataBoundControlMode.Edit); %> 
        <input type="submit" /> 
      </form>

  这样view页就可以自动生成添加或修改的表单,而其判断依据是ViewData.Model是否存在值

  我们在Controller中对id进行判断,如果存在则给ViewData.Model赋值

/// <summary> 
    /// 用于显示的页面 
    /// </summary> 
    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult Create(long? id) 
    { 
      if(id.HasValue) 
      { 
        using (var db = new DMvcDataDataContext()) 
        { 
          var art=db.Articles.Where(c => c.ID == id.Value).FirstOrDefault(); 
          return View(art); 
        } 
      } 
      return View(); 
    }

  同样,我们在它的处理Action也做一个判断

/// <summary> 
    /// 用于接收数据的页面,仅post访问 
/// </summary> 
/// <param name="id"></param> 
/// <param name="art"></param> 
/// <returns></returns> 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(long? id,Articles art) { 
      try { 
        if (ViewData.ModelState.IsValid) { 
          using (var db = new DMvcDataDataContext()) { 
            if (id.HasValue) { 
              //在存在id时修改数据 
              var a = db.Articles.Where(c => c.ID == id).FirstOrDefault(); 
              a.Title = art.Title; 
              a.Body = art.Body; 
              a.Author = art.Author; 
              a.AddTime = art.AddTime; 
            } 
            else {//不存在id时添加数据 
              db.Articles.InsertOnSubmit(art); 
            } 
            db.SubmitChanges(); 
            return RedirectToAction("List"); 
          } 
        } 
      } 
      catch (Exception ex) { 
        ModelState error = new ModelState(); 
        error.Errors.Add(ex); 
        ViewData.ModelState.Add("Category", error); 
      } 
      return View(); 
    }
本文示例源代码或素材下载


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3