2010-04-06 86 views

回答

1

实施例附:

部分:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<div id="subContent"> 
<fieldset> 
    <legend>Subscribe</legend>  
    <form id="subForm" method="post" action="<%= Url.Action("Subscribe") %>"> 
     <%= Html.ValidationSummary("Subscribe was unsuccessful. Please correct the errors and try again.") %> 
     <input type="text" name="name" id="name" /><%= Html.ValidationMessage("name", "*") %> 
     <input type="submit" /> 
    </form> 
</fieldset> 
</div> 
<script language="javascript" type="text/javascript"> 
$(document).ready(function() { 
    $('#subForm').live('submit', function() { 
     $.post($(this).attr('action'), $(this).serialize(), function(data) { 
      $("#subContent").replaceWith($(data)); 
     }); 
     return false; 
    }); 
}); 
</script> 

控制器:

[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Subscribe(string name) 
     { 
      ModelState.AddModelError("name", "You must enter a name"); 
      return PartialView("SubscribeForm"); 
     } 
2

正如你所建议的最简单的方法是把整个形式进入的局部视图,并执行一个Ajax请求返回这部分的控制器操作。如果您在此部分内使用验证助手,则会显示错误消息。

另一种替代方法是发布到控制器的操作,该操作将所有错误消息放入JSON数组中并将其传递给视图。然后使用JavaScript,您可以循环显示错误消息并显示它们。

+0

感谢您的答复。 我更喜欢选项1.我是否需要在jQuery响应中做任何事情? ('#subForm')。live('submit',function(){ $ .post($(this).attr('action'),$(this).serialize(),function(data){ //此处需要的任何内容? }); return false; }); – Chev 2010-04-07 10:15:40