2014-09-11 126 views
0

我有以下场景(这只是实际场景的一个示例,因为实际是很多代码)。MVC将模式数组传递给控制器​​使用jquery ajax

::实体

public class stuff 
{ 
    public int ID {get;set;} 
    public string sometext {get;set;} 
} 

::型号

public class StuffModel 
{ 
    public IEnumerable<entites.stuff> myStuff 
} 

::查看

<form class="frmItem"...> 
    <input type="hidden" name="Item.ID" id="Item_ID" value="something" /> 
    <input type="text" name="Item.stuff" id="Item_stuff" value="some text" /> 
</form> 
<form class="frmItem"...> 
    <input type="hidden" name="Item.ID" id="Item_ID" value="something" /> 
    <input type="text" name="Item.stuff" id="Item_stuff" value="some text" /> 
</form> 

::控制器

[HttpPost] 
public ActionView ProcessStuff(StuffModel myModel) 
{ 
    ... 
} 

我已尝试以下步骤做到这一点,但我不能让它填充模式:

$('.btnRecalc').click(function() { 
    var stuffItems = new Array(); 

    $('.sItem').each(function() { 
     var flag = $(this).data('haschanged'); 
     if (flag != 0) { 
      stuff[stuff.length] = $(this).find('.frmstuffItem').serialize(); 
     } 
    }); 

    if (stuffItems[0] != null) 
    { 
     var response = $.ajax({ 
      url: '@Url.Action("dosomething")' 
     , type: 'POST' 
     , data: { myModel: JSON.stringify({ myStuff: stuffItems}) } 
     }); 
    }; 
}); 

对于Ajax调用我已经尝试了所有以下的“数据”线:

, data: { JSON.stringify({ myStuff: stuffItems}) } 

, data: { JSON.stringify({ myModel: stuffItems}) } 

, data: { myModel: { myStuff: stuffItems} } 

, data: { myStuff: stuffItems } 

, data: { myModel: stuffItems } 

我的问题是如何向控制器发布模型的数组,其数据在表单中?

+0

一个很好的问题...我会编辑我的问题,包括该信息。 – StuartMc 2014-09-11 08:23:30

+0

你是否确实在任何地方写过'stuffItems'?什么是“东西”?关于javascript代码的其他一些注意事项:检查一个数组是否有任何内容可以执行'if(array.length)'。要添加一个项目到一个数组,你可以使用'array.push(item)' – xec 2014-09-11 08:51:17

+0

对不起,是的,它说的东西[stuff.length]应该说stuffItems [stuffItems.length]。感谢js的信息...我会做出这些改变。 – StuartMc 2014-09-11 09:05:26

回答

0

尝试

data: JSON.stringify({ myModel: { myStuff: stuffItems } }), 
contentType: 'application/json' 
+0

这恐怕不适合我。 – StuartMc 2014-09-11 09:58:12

+0

我注意到你没有设置数据类型被发送到服务器。答案已更新。现在它应该可以正常工作。 – SOReader 2014-09-11 11:33:29

+0

对不起,这个延迟...办公室代理非常严格,我无法回应。我想出了一种不同的方式来做我需要的东西,但我仍然想知道这一点。 – StuartMc 2014-09-25 21:27:14

相关问题