2014-03-05 110 views
0

我想在我的MVC应用程序上的输入上创建一个负载,由MVC模型绑定器拾取以填充我的视图模型。它不工作,我不知道为什么。MVC和淘汰赛模型绑定

这里是淘汰赛的片段与我希望创建的输入,模型绑定回暖:

 <div data-bind="foreach: witnesses"> 
      <input data-bind="attr: { name: 'Witnesses[' + $index() + '].firstName', value: firstName}" /> 
      <input data-bind="attr: { name: 'Witnesses[' + $index() + '].lastName', value: lastName}" /> 
      <!-- more fields here --> 
     </div> 

这里是C#视图模型的片段:

public class GraffitiViewModel 
{ 
    // view model 
    public List<Witness> Witnesses; 
} 

public class Witness 
{ 
    public string firstName { get; set;} 
    public string lastName { get; set; } 
    public string telephone { get; set; } 
    public string email { get; set; } 
    public string propertyNameNumber { get; set; } 
    public string street { get; set; } 
    public string postcode { get; set; } 
} 

输入已成功传递到Request.Form中的服务器,但它们不绑定到视图模型。任何人有任何想法为什么?我唯一的选择是通过MVC源代码来找出模型绑定发生的位置以及为什么它不起作用。

马克

+1

“证人”应该也是一个财产! '公共课GraffitiViewModel { //查看模型 公开列表 Witnesses {get;组; } }' – nemesv

+0

attr绑定部分很好'attr:{name:'Witnesses ['+ $ index()+'] .firstName'你可以尝试改回它,因为你的'Witnesses'是一个属性? – nemesv

+0

我做了,但没有奏效。 – serlingpa

回答

-1

我认为你正试图通过此设置name属性的证人['+ $指数()+“] .firstName。 所以你可以使用它与$父母的第一件事,而不是这个,你可以直接使用propery名称。正如@nemesv所建议的,首先让目击者成为一个财产。

<div data-bind="foreach: witnesses"> 
    <input data-bind="attr: { name: $parent.witnesses()[$index()].firstName, value: firstName}" /> 
    <input data-bind="attr: { name: $parent.witnesses()[$index()].lastName, value: lastName}" /> 
<!-- more fields here --> 
</div> 

http://jsfiddle.net/J3Yze/

+1

我已修改我的代码,使其看起来像上面,我已将证人字段更改为属性。尽管如此,我仍然无法在我的Witnesses物业上收到回覆。有任何想法吗?另外,$ parent和$ index的文档在哪里? – serlingpa

+0

找到文档!遗憾的淘汰赛网站没有搜索 – serlingpa

0

嗨你nemesv和alklesh

我的视图模型现在已经成功地结合,感谢您的帮助。建议的语法不起作用,所以我回到:

<input data-bind="attr: { name: 'Witnesses[' + $index() + '].firstName', value: firstName}" /> 

这不是很漂亮,但它的工作,所以我很高兴。我可能会重新审视它,并尝试使它更整洁,但我现在已经花了足够的时间,所以我正在继续前进。

再次感谢您的帮助。

马克