2012-03-06 98 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表单和验证功能,所以框架方式肯定会更好。