2011-03-31 38 views
3

使用asp.net MVC3和jQueryASP.net MVC和jQuery序列多种形式列出的对象,并提交

我有,每个创建一个页面上的形式x个当用户添加一个新的项目。每个表单都代表了c#中的一个模型。每个表单都有一个字符串列表作为属性之一。我想要一个提交所有表单的保存所有按钮,但是我想先将它们序列化到一个对象列表中,然后在后端对其进行排序。我如何使用jQuery来做到这一点?

<form> 
    <input name="ListThing" value="one" /> 
    <input name="ListThing" value="two" /> 
    <input name="ListThing" value="three" /> 
    <input name="Name" value="Bob" /> 
</form> 

<form> 
    <input name="ListThing" value="one" /> 
    <input name="ListThing" value="two" /> 
    <input name="ListThing" value="three" /> 
    <input name="Name" value="Pat" /> 
</form> 

C#

public class myModel{ 
    public List<string> ListThing {get; set;} 
    public string Name {get; set;} 
} 

控制器 - UploadController 肌动

[HttpPost] 
public ActionResult SaveAll(List<myModel> myModels) 
{ 
    // do stuff 
    return View(); 
} 

回答

7

你不能有相同ID的多个元素。因此,通过固定的标记开始:

<form> 
    <input name="ListThing" value="one" /> 
    <input name="ListThing" value="two" /> 
    <input name="ListThing" value="three" /> 
    <input name="Name" value="Bob" /> 
</form> 

<form> 
    <input name="ListThing" value="one" /> 
    <input name="ListThing" value="two" /> 
    <input name="ListThing" value="three" /> 
    <input name="Name" value="Pat" /> 
</form> 

,然后假设你有一些链接来触发动作:

@Html.ActionLink("Save all", "SaveAll", "Home", null, new { id = "saveall" }) 

你可以简单地AJAXify它:

$('#saveall').click(function() { 
    var data = $('form').map(function() { 
     var $form = $(this); 
     return { 
      name: $form.find(':input[name=Name]').val(), 
      listThing: $form.find(':input[name=ListThing]').map(function() { 
       return $(this).val(); 
      }).toArray() 
     }; 
    }).toArray(); 

    $.ajax({ 
     url: this.href, 
     type: 'post', 
     contentType: 'application/json', 
     data: JSON.stringify({ myModels: data }), 
     success: function (result) { 
      alert('done'); 
     } 
    }); 

    return false; 
}); 
+0

oops,很快打出来。编辑。感谢您的快速反应,现在就试试这个。 – 2011-03-31 17:12:46

2

Darin的解决方案的工作,但我个人会使用http://www.malsup.com/jquery/form/ Ajaxify的形式,而不必手工绘制。 ASP.Net MVC的默认活页夹将绑定具有相同名称(或具有顺序“[X]”索引器的相同名称)的多个元素作为列表。