【问题标题】:Can I access a C# Tuple value in Vue.js code?我可以在 Vue.js 代码中访问 C# 元组值吗?
【发布时间】:2019-04-03 13:29:37
【问题描述】:

那么问题来了,你能在 vue.js 中访问返回的 C# Tuple 变量吗?

例如,我有一个 vue.js 函数,它在刷新时调用一个 C# 操作 ('GetChartData'),它会向它返回一个 json 结果。

    refreshChart: function () {
        var vm = this;
        $.getJSON(window.chartDataRoute, {
            fromDate: (somedate),
            toDate: (somedate)
        }).done(function (data) {
            vm.chartData = data;
        });
    },

因此,C# 函数的 json 结果作为 ContentResult 类型传递到 vue.js 代码中的 vm.chartData 中。这是 C# 函数:

    public ContentResult GetChartData(DateTime? fromDate, DateTime? toDate)
    {
        var pageStats = (go away and get some data);
        var chartModel = ChartHelpers.GetMainChartModel(chartPeriod, pageStats);
        var json = JsonConvert.SerializeObject(chartModel, Formatting.Indented, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() });
        return new ContentResult { Content = json, ContentType = "application/json" };
    }

一切都非常简单,但我需要向 vue.js 函数返回两个新字段,我真的不想参与重写 json 结果,因为结果用于超出我正在尝试做的事情的范围。

那么,我可以将函数转换为元组并传递两个额外的 int 值,然后在 vue.js 代码中访问它们吗?像这样:

    public Tuple<ContentResult,int,int> GetChartData(DateTime? fromDate, DateTime? toDate)
    {
        var pageStats = (go away and get some data);

        var totalClicks = (an int number);
        var totalViews = (an int number);

        var chartModel = ChartHelpers.GetMainChartModel(chartPeriod, pageStats);
        var json = JsonConvert.SerializeObject(chartModel, Formatting.Indented, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() });

        // Can I return the extra data in a Tuple?
        return Tuple.Create(new ContentResult { Content = json, ContentType = "application/json" }, totalClicks, totalViews);
    }

但是,这破坏了 vue.js,因为我认为“数据”现在不同了,因此图表不起作用。所以我需要能够以某种方式将 ContentResult 分配给数据(就像现在一样),两个额外的整数。

如果我不能这样做,那么我可以用另一种不涉及深度重写任何 vue.js 的方式来做吗?问题之一是我有点 vue.js 新手...

【问题讨论】:

  • 否 - ContentResult 表示 HTTP 响应中返回的内容。如果您希望数据包含在 HTTP 响应中,那就是它需要去的地方。听起来您确实应该更改图表模型以包含额外的值。
  • 谢谢,这是我最后的选择——我真的没有时间纠结这个! :(

标签: c# vue.js


【解决方案1】:

调用 C# 函数两次,一次用于图表数据,另一次用于其他两个属性。 您还需要传递一些标识符,为图表数据或其他两个属性调用 C# 函数。

【讨论】:

  • 这实际上是我刚刚实施的解决方案,因为我正在等待任何建议!我实际上为总计创建了一个新函数,但你说得对,我本来可以只保留一个。我的主要问题是我调用了 stats-generating 函数 3 次,这让我作为一名程序员感到恼火,因为它非常浪费,SQL 密集型和不优雅......如果我没有得到任何其他解决方案,我会标记这个作为答案,因为它是到目前为止我在做什么!但理想情况下,会找到更好的方法:)
  • @Ralpharama:您已经知道更好的方法:返回包含所有数据的单个响应。有多种方法可以做到这一点,包括将两个额外的数据点添加到现有数据结构中,或者通过创建一个新的“更高级别”数据结构,将现有值作为一个属性,将两个新值作为另外两个属性.
  • 谢谢@jon-skeet,更好的方法就是太复杂了。我想我可以添加一个更高级别的包装,或者在结构中添加两个额外的数据点,但是更改生成模型以进行序列化的代码,而模型对于我被要求做的这个小编辑来说太多了.破解它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 2020-09-02
  • 2011-06-19
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
相关资源
最近更新 更多