没有Knockout模型绑定自动填充输入

时间:2014-07-09 22:01:07

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

我有一个从C#-ViewModel自动创建的淘汰模型:

的ViewModels:

public class SearchModel
{
    public ActualLocationModel Location { get; set; }
}

public class ActualLocationModel
{
    public string Address { get; set; }
}

search.js:

function Search(model) {
    var self = this;
    self._model = model;
    ko.applyBindings(self._model, document.getElementById("searchForm"));
    $('#submitButton').click(function () {
        alert(self._model.ActualLocation.Address); // proof!
    });
}

Search.cshtml:

@model ViewModels.SearchModel

<div id="searchForm">
    <input data-bind="value: ActualLocation.Address" type="text">
    <input type="submit" id="submitButton" value="Find" />
</div>

<script type="text/javascript">
    $(function () {
        window.search= new Search(@Html.Raw(Json.Encode(Model)));
    });
</script>

因此,只要我手动输入值,数据绑定就会按预期工作。但在我的情况下地理位置会自动填充值。在这种情况下,绑定不会做它应该做的事情(输出总是null)。有没有办法让Knockout数据绑定工作在自动填充输入上?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

好的,这里有相关的内容可以帮到你:

<script type="text/javascript">
    $(function() {
        window.search = new Search(JSON.parse('@Html.Raw(Json.Encode(Model))'));
    });
</script>

注意我们正在解析转换为JSON的模型,因此我们可以在模型中使用生成的Javascript对象。如果你想直接从JSON到你的模型,考虑ko.mapping库,虽然不再积极维护,我相信。

<form id="searchForm">
    <input data-bind="value: Location.Address" type="text">            
    <input type="submit" id="submitButton" value="Find" />
</form>

在此处,请注意从AdditionalLocation.AddressLocation.Address的更改。

function Search(model) {
    var self = this;
    self._model = model;
    ko.applyBindings(self._model, document.getElementById("searchForm"));

    $('#submitButton').click(function () {
        alert(self._model.Location.Address); // proof!
    });
}

最后,我们会修正提醒以反映数据的形状(AdditionaLocationLocation)。

使用上述内容,一切都按预期方式运行。