2010-02-03 57 views
2

我有一個部分視圖,它具有一個Ajax.BeginForm,並帶有UpdateTargetID集。當表單上的驗證失敗時,更新目標標識將被替換爲驗證錯誤,但當沒有驗證錯誤時,應將用戶重定向到新頁面。如何使用Ajax.BeginForm呈現完整視圖

在我的局部視圖的代碼是

<div id="div_UID"> 
    <% using (Ajax.BeginForm("FindChildByUID", new AjaxOptions { UpdateTargetId = "div_UID" })) 
     {%> 
      <p> 
       <label>UID:</label> 
       <%= Html.TextBox("UID") %> 
      </p> 
      <input type="submit" value="Continue" /> 
    <% } %> 
</div> 
</pre> 

在我的控制器中的代碼是如此如下

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult FindChildByUID(Student student) 
    { 

     Student matchingStudent = _studentService.FindChildByUID(student.UID); 
     if (matchingStudent == null) 
     { 
      ModelState.AddModelError("UID", String.Format("No matching child found for the entered UID: {0}", student.UID)); 

      return PartialView(); 

     } 
     else 
     { 
      // full view 
      return RedirectToAction("ConfirmChildDetails", matchingStudent); 
     } 
    } 

,因爲我一直不成功它自己的顯示完整的視圖,爲它似乎總是在Ajax.BeginForm中指定的UpdateTargetID div中查看完整視圖。

關於如何讓這個工作的任何建議?

感謝

回答

1

你的AJAX後做的是發出請求,並等待包含HTML輸入到網頁的響應。配置是這樣的,無論返回什麼html都會被注入到你命名爲「div_UID」的div中。

我通常會避免這種情況,如果POST成功結果時需要重定向,則使用傳統發佈。

我想你可以使用jQuery提交,而不是Ajax.BeginForm做這樣的(或只設置一個回調函數爲您Ajax.BeginForm):

function SubmitForm(form) { 
    $(form).ajaxSubmit({ target: "#div_to_update", success: CheckValidity }); 
} 

function CheckValidity(responseText) { 
    var value = $("#did_process_succeed").val(); 

    if (value == "True") { 
     window.location.replace("url_of_new_action_here"); 
    } 
} 

你只要有一個隱藏的字段在你的部分視圖中稱爲「did_process_succeed」,並根據控制器中的某些邏輯設置True或False的值。

也可能有其他方法。也許別人會加入進來,我希望現在可以幫到你。

+0

非常感謝您的回覆。我不確定的一件事是如何爲Controller操作中的responseText參數傳遞一個值。如果你能爲我提供一個如何做到這一點的例子,那將是非常棒的。 – bhiku 2010-02-04 09:53:31