2012-03-06 108 views
1

我有一個簡單的ASP.net mvc網站,其中使用JQuery的標籤來佈局內容。在其中一個選項卡中,我呈現了一個PartialView,該PartialView綁定到它自己的模型,允許用戶更新其系統設置細節。這裏是partialview的一部分被渲染:ASP.net mvc表單驗證內Jquery標籤

<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl(of SystemSetupViewModel)" %> 
<% Using Html.BeginForm("UsrCtlSystemSetup", "User", FormMethod.Post)%> 
<%: Html.ValidationSummary(True, "Invalid details supplied.")%>  
<div class="tabDynamicHeight "> 
<div class="FormFullRow formLayoutLabel"> 

    <div class="Seperator"> 
<div class="FormFullRow longInput"> 
    <%: Html.LabelFor(Function(model) model.WebsiteAddress)%> 
<%: Html.TextBoxFor(Function(model) model.WebsiteAddress)%> 
<%: Html.ValidationMessageFor(Function(model) model.WebsiteAddress)%> 
</div>         
<small class="helpText FullRow">Your Companies Website  Address.</small>              
</div> 

</div> 

    <div class="FloatButtonLeft"> 
      <input type="submit" value="Save" class="FloatButtonLeft BlueBtnMedium" /> 
    </div> 

</div> 
    <% End Using %> 

這是提交方法:

<HttpPost()> _ 
    <ValidateInput(False)> _ 
    Public Function UsrCtlSystemSetup(ByVal btnSubmit As String, ByVal model As SystemSetupViewModel) As ActionResult    
     model.SaveChanges() 
     Return PartialView("UsrCtlSystemSetup", model) 
    End Function 

我就是應該從這個方法返回的問題。返回一個partialView只返回一個佔據整個頁面的partialview。我需要能夠以某種方式將部分視圖返回到持有jquery選項卡。這可能嗎?我可以做一個RedirectToAction回到父頁面操作,但這意味着如果在提交的partialviews模型中有錯誤,我將無法顯示它。希望這是有道理的。

在此先感謝

+0

你可以嘗試更新頁面的部分部分,例如選項卡ajax – 2012-03-06 03:22:21

+0

你有什麼機會可以詳細說明這一點?或者提供一個例子的鏈接? – Matt 2012-03-06 04:25:48

+0

請在下面的鏈接中找到有關MVC和AJAX實施的更多信息 http://stackoverflow.com/questions/7333904/asp-net-mvc-3-ajax/7334036#7334036 – 2012-03-06 04:45:11

回答

0

我假設你想對你的UsrCtlSystemSetup表單輔助部分更新和驗證?如果是這種情況,而不是使用Html.BeginForm助手,則可以使用Ajax.BeginForm Helper。通過Ajax.BeginForm Helper,您可以指定一個DOM元素(通過它的id)使用表單submit Action返回的View進行更新,而不會導致完整的回發。下面是使用剃刀語法您的代碼示例:

@using (Ajax.BeginForm("UsrCtlSystemSetup", "User", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "resultDiv", HttpMethod = "Post", OnSuccess = "AjaxDone" }, new { @id = "myFormId" })) 
{ 
    <div id="resultDiv"> 
     @Html.ValidationSummary(True, "Invalid details supplied.")  
     <div class="tabDynamicHeight "> 
      <div class="FormFullRow formLayoutLabel"> 
       <div class="Seperator"> 
        <div class="FormFullRow longInput"> 
         @Html.LabelFor(Function(model) model.WebsiteAddress) 
         @Html.TextBoxFor(Function(model) model.WebsiteAddress) 
         @Html.ValidationMessageFor(Function(model) model.WebsiteAddress) 
        </div>         
       <small class="helpText FullRow">Your Companies Website  Address.</small>              
       </div> 
      </div> 
      <div class="FloatButtonLeft"> 
       <input type="submit" value="Save" class="FloatButtonLeft BlueBtnMedium" /> 
      </div> 
     </div> 
    </div> 
} 

,這裏是在C#中的控制器實現:

[HttpPost] 
    public ActionResult UsrCtlSystemSetup(SystemSetupViewModel model) 
    { 
     try 
     { 
      if (ModelState.IsValid) 
      { 
       // Add implementation for when your model state is valid 
       // I assumed a UsrCtlSystemSetupSuccess View to indicate that the form 
       // submit was parsed successfully 
       return PartialView("UsrCtlSystemSetupSuccess", model) 
      } 
      else 
      { 
       // Add implementation for when your model state is NOT valid 
       return PartialView("UsrCtlSystemSetup", model); 
      } 
     } 
     catch 
     { 
      // Handle errors... 
      return PartialView("UsrCtlSystemSetup", model); 
     } 
    } 

在這種設置中,Asp.Net框架將更新<div id="resultDiv">的內容與由UsrCtlSystemSetup Action使用ajax返回的PartialView。我相信這是你想達到的目標?

或者,您可以拋棄Asp.Net Ajax Helper,只需使用jQuery向服務器發出ajax調用,即可在客戶端或服務器上自己獲取響應並生成html。但是由於您已經在使用Asp.net表單和驗證功能,所以框架方式肯定會更好。