2010-03-23 67 views
2

我在页面上方的结果表中有一个小的部分Create Person表单。我希望能够将表单发布到服务器,这对于ajax.Beginform没有任何问题。MVC 2 Ajax.Beginform通过返回的HTML + JSON到JavaScript函数

<% using (Ajax.BeginForm("Create", new AjaxOptions { OnComplete = "ProcessResponse" })) 
      {%> 
     <fieldset> 
      <legend>Fields</legend> 

      <div class="editor-label"> 
       <%=Html.LabelFor(model => model.FirstName)%> 
      </div> 
      <div class="editor-field"> 
       <%=Html.TextBoxFor(model => model.FirstName)%> 
       <%=Html.ValidationMessageFor(model => model.FirstName)%> 
      </div> 

      <div class="editor-label"> 
       <%=Html.LabelFor(model => model.LastName)%> 
      </div> 
      <div class="editor-field"> 
       <%=Html.TextBoxFor(model => model.LastName)%> 
       <%=Html.ValidationMessageFor(model => model.LastName)%> 
      </div> 

      <p> 
      <input type="submit" /> 

      </p> 
     </fieldset> 
<% 
      } 
%> 

然后在我的控制器,我希望能够回来后部分这仅仅是一个表行 如果创建成功,并且把它添加到表,我可以用jQuery轻松做到。

$('#personTable tr:last').after(data); 

但是,如果服务器验证失败我想通过我的后面部分创建人形式与验证错误,并取代现有的创建人形式。

我试图返回JSON数组

控制器:

return Json(new 
       { 
        Success = true, 
        Html= this.RenderViewToString("PersonSubform",person) 

       }); 

使用Javascript:

var json_data = response.get_response().get_object(); 

与合格/不合格标志,并使用下面的孤子呈现为字符串部分但是当表单失败时不会呈现mvc验证控件。

SO RenderPartialToString

那么,有没有什么办法可以手写我的开箱PartialView(“为personForm”)的JavaScript作为从我ajax.form它回来了?我可以传递一些附加信息作为Json数组,以便我可以判断它的通过或失败,并可能添加消息?

UPDATE

我现在可以通过一个PartialView我的JavaScript的HTML,但我需要通过像ServerValidation一些额外的数据对:真/假和ActionMessage的:“你刚才创建的比尔的人”。理想情况下,我会传递Json数组而不是隐藏字段。

function ProcessResponse(response) { 

      var html = response.get_data(); 

      $("#campaignSubform").html(html); 

     } 

提前感谢

回答

0

我已经在这种情况下做实际上是呈现出具有所有信息(例如验证信息等)的局部视图,然后使用DOM功能jQuery来提取我需要的东西,如果它不仅仅是为了显示。以一种格式保存所有内容,我不必为处理json和html而担忧。

0

为什么你甚至需要传回部分人物?据我所知ASP.NET MVC应填写用户填写表格填写,但添加验证错误的形式。

然后他们可以更正错误并再次提交表单。听起来更像是网站设计中的一个问题,以及你不应该首先做的事情。

如果您需要存储用户输入的数据我会创建一个json person对象并提交该对象与ajax请求,然后当验证错误返回时,您已经有了已发送的数据。

只要用户正在查看页面,Ajax就可以让您在Web客户端中拥有状态。