【问题标题】:How to set a knockout property with a MVC model view property in a partial view如何在局部视图中使用 MVC 模型视图属性设置敲除属性
【发布时间】:2012-06-09 21:06:11
【问题描述】:

我有下一个场景:

我正在使用淘汰赛(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)中的值传递给淘汰模型以调用控制器中的函数(productSeriesNonSocksModel.seasonType)。

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

seasonType: ko.observable(@Model.SeasonType)

seasonType: @Model.SeasonType

但它不起作用。任何想法将模型属性值传递给敲除属性值以便使用 $.get(...) 进行调用?

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

提前谢谢你。

【问题讨论】:

  • 在渲染的 html 中,@Model.SeasonType 显示了什么?
  • 当前值Tyrsius,例如:“InSeason”,所以在模型中正确传递给局部视图。
  • ... 这个值就是我需要为控制器进行调用的值。

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


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答!但是我收到了一个与 JScript 相关的错误,该错误是关于 SeasonType 具有的值的非定义。其他两个选项也是如此。
  • 用""就可以,所以语句为:var seasonType = "@Model.SeasonType";并且可以在 $.get 参数中使用。谢谢!!
猜你喜欢
  • 2014-06-27
  • 1970-01-01
  • 2012-10-26
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多