C# MVC 3 部分视图未命中控制器方法

本文关键字:控制器 方法 视图 MVC | 更新日期: 2023-09-27 17:55:20

我有一个创建用户页面 - 它目前列出了系统中所有当前用户的表。 我可以单击创建新按钮 - 这将执行 jQuery ajax 提交,该提交调用我的控制器方法并返回部分视图并加载包含所有字段的新模式 jQuery 对话框,即名字、姓氏等。所以我在后台有我的表格,这个对话框在模态视图中的屏幕中央,所以它优先。 如果单击用户名,则相同的方法称为excpet,传入一个uniquie用户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;
});

我的对话框容器与第一个页面加载的容器相同,当我从UserAction方法返回时,我想更新该容器,其中包含一条简单的消息,说"用户已更新"或"用户已删除",然后单击该按钮将刷新整个页面(因此主表将被更新)

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

   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方法上设置了一个断点,但是当我点击"删除用户"按钮或"保存用户"按钮时,它永远不会被击中,这是我卡住的。

C# MVC 3 部分视图未命中控制器方法

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

public ActionResult UserAction(string id)
{
    ...
}

应考虑将邮件类用于 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管理员模式下使用断点来确保调用正确填充你的消息对象。