2013-01-22 36 views
0

我有一个创建用户页面 - 它目前列出一个包含系统中所有当前用户的表格。我可以点击创建新按钮 - 这是做一个jQuery ajax提交,它调用我的控制器方法并返回一个局部视图,并加载包含所有字段的新模态jQuery对话框,例如Forename,Surname等。所以我有我的表格背景和模态视图中屏幕中心的这个对话框,所以它优先。如果一个用户名被点击,同样的方法被称为excpet,一个唯一的用户ID被传入,所以对话框表单不会被加载为空 - 它将从用户数据库中加载用户的当前详细信息,并作为用户标识存在删除按钮被添加到用户对话框以及保存和取消,这些都在创建新的。C#MVC 3部分视图不符合控制器方法

现在的问题 - 我已经附上我的部分视图页面如下 - 我也添加了自己的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方法,但它永远不会获得击中当我点击删除用户按钮或保存用户按钮时,我被卡住了。

+0

如果您添加一个OnError处理程序并只是提醒某事,该处理程序是否会被解雇? – glosrob

+0

@glosrob - 会尝试在ajax调用中添加错误处理程序,并查看它是否触发。 –

+0

您的提交触发器选择器上有错字(缺少单引号)。这是你正在使用的确切代码还是只是一个重写的Stack示例? –

回答

0

你正在发送你的文章与表单数据,但你期待你的UserAction模型(json对象)。您应该使用参数来匹配表单输入。

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

但我发送的不仅仅是一个id - 如果它的创建新的或更新的同一个提交被调用,所以我发送模型将需要的所有细节 - 名字/姓氏/电子邮件地址等 –

+0

@KOL,啊,有趣。这从您发布的代码中并不清楚。也就是说,我认为通过在BeginForm方法中声明参数id,你会混淆它。如果我明白你在做什么,那么无论如何你都会将整个事件序列化为json字符串,对吗?我的观点是,你发布的内容和控制器期望的内容不一样,至少很可能是一个命名问题。小提琴手说你张贴什么? –

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管理员模式下使用断点以确保调用正确地填充消息对象。