如何在局部视图中使用MVC模型视图属性设置knockout属性

时间:2012-06-05 20:12:13

标签: jquery asp.net-mvc knockout.js

我有下一个场景:

我正在使用knockout(版本2.1.0)和ASP MVC.NET,因此在一个特定点我的控制器调用一个新视图。此视图使用下一个调用呈现部分视图:

<div id="productSeriesNonSocks">
    @{
    Html.RenderPartial("~/Views/SalesOrderManagement/GetAvailableProductSeriesNonSocks.cshtml", Model);
     }
</div>

控制器使用带有一些属性的viewModel(Model)调用视图,因此上面的调用将整个模型发送到局部视图。

在局部视图中,我可以使用如下简单的句子访问模型属性:

Available season type: @Model.SeasonType

问题从这里开始......部分视图有自己的淘汰模型:

<script type="text/javascript">
$(function () {
    //activates KO
    ko.applyBindings(productSeriesNonSocksModel);
    GetDataFromModels();
});

var productSeriesNonSocksModel = {
    AvailableProductSeriesNonSocks: ko.observableArray([]),
    selectedProdSeries: ko.observable(),
    seasonType: ko.observable()
};

function GetDataFromModels() {
    $.get('/SalesOrderManagement/GetAvailableProductSeriesNonSocks', { seasonType: this.seasonType() }, function (data) {
        productSeriesNonSocksModel.AvailableProductSeriesNonSocks(data.AvailableProductSeriesNonSocks);
    });
}

</script>

GetDataFromModels()函数应该使用seasonType作为参数调用控制器中的方法,以便检索正确的数组并将其放在AvailableProductSeriesNonSocks数组中。这里的问题是我不知道如何将值从属性模型(在本例中为@ Model.SeasonType)传递给knockout模型以调用控制器中的函数(productSeriesNonSocksModel.seasonType)。

我试图通过以下方式传递值:

seasonType: ko.observable(@Model.SeasonType)

seasonType: @Model.SeasonType

但它不起作用。有没有想过将模型属性值传递给knockout属性值以便使用$ .get(...)进行调用?

为了澄清,我不能只询问该值,因为该值(SeasonType)是由用户在上一个视图中选择的。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在脚本标记中使用razor。

<script type="text/javascript">
    var seasonType = @Model.SeasonType;
    // do something with season type
</script>

避免额外请求也可能有意义。您可以将“/ SalesOrderManagement / GetAvailableProductSeriesNonSocks”中的数据放入模型或ViewBag中,并将其呈现为JavaScript对象。