2013-01-22 34 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管理員模式下使用斷點以確保調用正確地填充消息對象。