0

我有一个创建用户页面 - 它当前列出了一个包含系统中所有当前用户的表。我可以单击创建新按钮 - 这会执行 jQuery ajax 提交,它调用我的控制器方法并返回部分视图并加载新的模态 jQuery 对话框,其中包含所有字段,即 Forename、Surname 等。所以我的表在背景和此对话框位于模态视图的屏幕中心,因此优先。如果单击用户名,则调用相同的方法 excpet 传入一个唯一的用户 ID,因此对话框表单不会加载为空白 - 它从数据库加载用户的当前详细信息,并且作为用户 ID,有一个删除按钮已添加到“用户”对话框以及“新建”时的“保存”和“取消”。

现在解决问题 - 我已将我的部分视图页面如下所示 - 我还将其自己的 js 添加到部分视图中,因为我需要根据用户做出的一些选择显示/隐藏差异下拉框。

@using (Html.BeginForm("UserAction", "Admin", FormMethod.Post, new { id = "userActionForm" }))
{
//Fields on the dialog box....
}

然后在对话框上 - 我有按钮,即

<input id="DoDeleteUser" type="button" class="dialog-button" value="Delete User" style="margin: 5px" />

然后在我的页面的 JS 文件中,我有以下内容:

         $('#DoDeleteUser').click(function (event) {
          //alert("Delete Button Pressed"); - In for debugging
        $('#userID').val($(event.target).attr("userId")); - get id value into hidden field on page
        $('action').val('Delete'); - put action string into hidden field on page
        $('#userActionForm).submit();

      });

    $('#userActionForm').submit(function () {

       var formData = $("#userActionForm").serializeArray();

        $.ajax({
                url: this.action,
                type: this.method,
                data: formData,
            success: function (result) {
                $('#dialogContainer').html(result);
            }

        });
       return false;
});

我的对话框容器与第一个页面加载的容器相同页面(因此主表将被更新)

然后在我的控制器上我有这样的方法:

   public ActionResult UserAction(UserModel model)
    {

        if (ModelState.IsValid)
        {
              if(model.Action == "Delete")

               //Go and do delete
               return PartialView ("UserActionSuccess", model);

          //close if etc etc

但是,我在我的控制器中的 UserAction 方法上设置了一个断点,但是当我点击删除用户按钮或保存用户按钮时它永远不会被击中,这是我卡住了。

4

2 回答 2

0

您应该考虑为 CRUD 方法使用消息类。它应该使逻辑更清晰。

public class CreateUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class DeleteUser
{
    public int UserId { get; set; }
}

然后,您将为每个 CRUD 方法设置一个控制器操作,如下所示:

public ActionResult Create(CreateUser message)
{
}

public ActionResult Delete(DeleteUser message)
{
}

在 jQuery 中,您将准备 AJAX 调用,如下所示:

$.ajax({
    url: "/yourcontroller/create",
    type: "POST",
    data: formData,
    success: function() { console.log('success'); },
    error: function() { console.log('error'); }
});

$.ajax({
    url: "/yourcontroller/delete/" + $("#userId").val(),
    type: "DELETE",
    success: function() { console.log('success'); },
    error: function() { console.log('error'); }
});

最后,一旦你把它们连接起来,你就可以使用 Firebug 来检查 jQuery 方面的事情,然后在 VS 管理员模式下使用断点来确保调用正确地填充了你的消息对象。

于 2013-03-10T20:58:11.890 回答
0

您正在发送带有表单数据的帖子,但您希望 UserAction 上有一个模型(json 对象)。您应该使用参数来匹配表单输入。

public ActionResult UserAction(string id)
{
    ...
}
于 2013-01-22T18:21:12.717 回答