代码之家  ›  专栏  ›  技术社区  ›  SeanX

使用Ajax V窗体

  •  0
  • SeanX  · 技术社区  · 16 年前

    我有一个表,每行包含一个任务。我希望有一个带有链接的列,允许用户切换任务的完成状态。

    因为这正在更改数据,所以我只允许从日志调用更改操作。例如,我有一个actionfilter为[acceptverbs(httpverbs.post)]。

    这反过来需要表的每一行中都有一个表单。这是可行的,但到处都有一个丑陋的按钮。

    我想我可以通过使用ajax.actionlink来实现我正在寻找的数据安全性,并检查操作以确保它是一个ajax调用。

    目前我有一些

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult ToggleToDoItem(int Id, int? page)
        {
            //update completed status
            ...
    
            return ToDoItemsPv(null, page);
        }
    

    我想把它改成 public actionresult toggleTodoitem(int id,int?页) { if(httpContext.request.isajaxRequest()) { //更新完成状态 …

                return ToDoItemsPv(null, page);
            }
            else
            {
                return Redirect(some error page);
            }
        }
    

    我尝试实现的主要目标是用链接替换表单按钮,使其看起来更好。

    这样安全吗? 练习得好吗?

    谢谢

    2 回复  |  直到 9 年前
        1
  •  1
  •   marc_s MisterSmith    9 年前

    在我看来这有点倒退。

    我的直接反应是,为什么不使用jquery进行回发、更新数据库中的数据、返回一个标志或其他什么,只更新屏幕上需要它的那一部分?

    这里没有很好的理由说明你不能使用jquery部分发帖,这样就不用为每一项数据都创建一个表单了。

    我甚至会返回一个partialview,在jquery成功后,我会用它来附加或替换现有内容。

    编辑

    我做这样的部分回邮;

    $.post("/Articles/jQueryAddComment", { commentText: commentText, id: id},  function(newCommentListHTML) {
      // the newCommentListHTML is a partial view that I return
      // and i simply replace the contents of the comment list with
      // this new content.
    });
    

    我的C语言;

    public ActionResult jQueryAddComment(string commentText, int id)
    {
      //get data
    
      return PartialView("CommentLisr");
    }
    

    您需要调整jquery的内容,这样您就不会替换整个批内容,或者您想要替换的内容。

    JQuery

    有一些很酷的jquery命令可以使用。

    如果要附加新的partialView,请使用(append)关键字。如果要替换它,只需用新内容替换绑定DIV的内容。

    <div class="BoundingData">
    </div>
    
    $('.BoundingData').html(NewHTMLFromPostback);
    
        2
  •  0
  •   SeanX    16 年前

    actionlink包含一个选项来设置http方法,以便它可以执行一个post

    <%= Ajax.ActionLink(c.Completed ? "Mark uncompleted" : "Mark completed", "ToggleToDoItem", new { Id = c.Id}, new AjaxOptions { UpdateTargetId = "partial", HttpMethod = "POST" })%>