MVC和淘汰模型绑定

时间:2014-03-05 09:24:02

标签: c# asp.net-mvc knockout.js model-binding

我正在尝试在我的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源代码,找出模型绑定发生的位置以及它无法正常工作的原因。

标记

2 个答案:

答案 0 :(得分:0)

你的nemesv和alklesh

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

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

这不太好但是有效,所以我很高兴。我可能会重新审视它,并试着让它更整洁,但我现在已经花了足够的时间,所以我继续前进。

再次感谢您的帮助。

标记

答案 1 :(得分:-1)

我认为您正在尝试通过此'Witnesses ['+ $ index()+']。firstName设置name属性。 所以首先你可以使用$ parent而不是这个你可以直接使用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/