Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#MVC 3局部视图不命中控制器方法_C#_Jquery_Ajax_Asp.net Mvc 3_Razor - Fatal编程技术网

C#MVC 3局部视图不命中控制器方法

C#MVC 3局部视图不命中控制器方法,c#,jquery,ajax,asp.net-mvc-3,razor,C#,Jquery,Ajax,Asp.net Mvc 3,Razor,我有一个创建用户页面-它当前列出了一个包含系统中所有当前用户的表。我可以单击“创建新”按钮-这会生成一个jQuery ajax submit,它调用我的控制器方法并返回一个局部视图,并加载新的模态jQuery对话框,该对话框包含所有字段,如名字、姓氏等。因此,我将我的表放在后台,而该对话框位于模态视图的屏幕中央,因此它优先。如果单击用户名,则相同的方法称为excpet,将传入uniquie用户id,因此对话框表单不会加载为空-它将加载数据库中用户的当前详细信息,并且作为用户id,用户对话框中会添

我有一个创建用户页面-它当前列出了一个包含系统中所有当前用户的表。我可以单击“创建新”按钮-这会生成一个jQuery ajax submit,它调用我的控制器方法并返回一个局部视图,并加载新的模态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" />
我的对话框容器与第一个页面加载的容器相同,当我从UserAction方法返回时,我想用一条简单的消息“User Updated”(用户已更新)或“User Deleted”(用户已删除)和一个OK(确定)按钮更新整个页面(因此主表将被更新)

然后在我的控制器上,我有如下方法:

   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方法上设置了一个断点,但当我点击Delete User按钮或Save User按钮时,它从未被点击,因为我被卡住了。

您正在发送带有表单数据的帖子,但您希望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管理员模式下使用断点,以确保调用正确填充您的消息对象。

但我发送的不仅仅是一个id-如果是创建新的或更新的,则会调用相同的提交,因此我会发送模型需要的所有详细信息-姓名/姓氏/电子邮件地址,etc@KOL啊,有意思。从你发布的代码中不清楚这一点。也就是说,我认为在BeginForm方法中声明参数id是在混淆它。如果我明白你在做什么,你就把整个东西序列化成一个json字符串,对吗?我的观点是,您发布的内容与控制器期望的内容并不相同,最有可能是命名问题。fiddler说你在发布什么?如果你添加了一个OnError处理程序并发出了警告,该处理程序会被触发吗?@glosrob-将尝试在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'); }
});