2013-06-26 130 views
2

嗨我的頁面有問題。我在同一頁面中有一個視圖頁面和兩個表單。使用jQuery彈出對話框問題

問題是我有一個主窗體和另一個窗體,它是由JQuery顯示的。我的問題是當我打開對話框,提交它的窗體並返回視圖時,對話框會出現。我不知道如何返回結果,它仍然會顯示打開的對話框。

我需要你的幫助!

下面是我在我的應用程序中使用的代碼。

.CSTHML窗體

@using (Html.BeginForm("Login2", "Account", FormMethod.Post, new { @id = "loginForm" })) 
{ 
    <a id="submitlink" href="#" class="button button-large">Sign In</a> 
} 

// This is the pop-up dialog box 
@using (Html.BeginForm("TroubleSubmit", "Account", FormMethod.Post, new { @id = "troubleSubmitForm" })) 
{ 
    <a id="troubleSubmitLink" href="#" class="button">OK</a> 
} 

JQUERY

$('a#submitlink').click(function() { 
      $('#loginForm').submit(); 
     }); 

$('a#troubleSubmitlink').click(function() { 
      $('#troubleSubmitForm').submit(); 
     }); 

下面是我的控制器動作來處理的代碼的對話框形式提交:

public ActionResult SignInTrouble(some parameter...) 
    { 
     // some operation and validation here 

     return View(); // ??? What view will I return? When I return "Login" it will reload the page and close the dialog box. 
    } 

同樣,怎麼辦我返回的視圖仍然會顯示對話框

+1

一旦你提交頁面重新加載的形式。如果您不想重新加載頁面,則應該使用AJAX請求。 –

+0

或iFrame,我認爲jQuery對話框處理它們 –

+0

你能給我一些示例代碼嗎? – Mat

回答

0

你提交表單在傳統(非AJAX)的方式使該頁面將重新加載。所以你需要以AJAX的方式發佈。

$("#submitlink").on("click", function() { 
    var loginForm = $("#loginForm"); 

    $.ajax({ 
     url: loginForm.attr("action"), 
     type: "post", 
     data: loginForm.serialize(), 
    }) 
    .done(function(result) { 
     // do something with the returned response 
    }); 
}); 

成功的響應與.done()處理,但你回來什麼,你是如何處理的結果是你。最簡單的選擇是返回一個局部視圖,因此它只是一個插入到現有div容器中的html片段。

.done(function(result) { 
    $("#someDiv").html(result); 
}); 

我經常返回JSON,其視圖呈現爲html字符串{ status: 0, message: "Success", html: "<div>..." }。如果你只需要一個簡單的YES/NO,你可以省略JSON中的html片段。

public ActionResult SignInTrouble(some parameter...) 
{ 
    // some operation and validation here 

    return Json({ 
     status: 1, 
     message: "Validation Error" 
    }); 
} 

然後你得到一些更多的可能性與您迴應

.done(function(result) { 
    var status = result.status; 
    var message = result.message; 
    if (status == 0) { 
     // OK 
    } else { 
     // ERROR 
    } 
    $("#messageDiv").text(message); 
} 
0

它只是由於頁面被重新加載,在這種情況下您必須使用ajax表單,所以它只會處理ajax表單的動作,然後將結果返回給沒有形式重新加載頁面

@Ajax.BeginForm("TroubleSubmit","Account", new AjaxOptions(){ ...... }) 
+0

你的意思是說,用你的建議替換這個「@using(Html.BeginForm(」TroubleSubmit「,」Account「,FormMethod.Post,new {@id =」troubleSubmitForm「}))」,對吧?我的意思是 – Mat

+0

,但是你必須在AjaxOptions選項中改變一些東西來適應你的需求。 –

+0

我現在能夠使Ajax.BeginForm工作,我現在的問題是如何返回一個驗證錯誤消息到對話框? – Mat