【问题标题】:"Expression does not produce a value" in javascript, vb.netjavascript,vb.net中的“表达式不产生值”
【发布时间】:2015-09-10 16:04:56
【问题描述】:

在“交易”模型的创建视图中,我定义了一个 javascript 函数,当单击按钮时,它会在列表属性中创建一个新对象。

我收到错误“表达式不产生值”。我不期待一个值,我只需要在列表中创建一个新的空对象,所以我不明白这个错误。

在我看来,将新句点添加到列表中的行会引发错误:

<script type="text/javascript">
    function addRow() {
        @Model.Periods.Add(New DealPeriod());
        ...
    }
</script>

“交易”模型:

Public MustInherit Class Deal

    ...

    <Display(name:="Periodos")>
    Public Property Periods As New List(Of DealPeriod)

【问题讨论】:

    标签: javascript .net vb.net


    【解决方案1】:

    这里有两个问题 - 涵盖“表达式不产生值”问题中的问题:

    这里的@symbol表示“将下面的结果输出到http响应流”

    由于List.Add() 返回 void,因此没有任何内容可发送到响应流,因此它会为您提供错误消息。

    换句话说,@ 需要一个值,而List.Add() 不会生成一个值。

    第二个问题是您似乎将服务器端执行与客户端执行混合在一起(注意我不是说服务器端/客户端代码,这与您拥有它的方式类似) .当调用“addRow”时,您似乎想添加一个新的“DealPeriod”——这根本不是它的工作方式。 VB.Net 代码在服务器上运行,而 javascript 代码在客户端、浏览器中运行。它们没有联系在一起。

    有一些方法可以链接它们,例如 ajax 调用或信号器。

    【讨论】:

    【解决方案2】:

    您期望 @Model.Periods.Add(New DealPeriod()); 在调用该 javascript 函数时运行,但事实并非如此。内联 VB 代码在将 HTML 发送到客户端之前在服务器端运行。 打开网页后,查看页面源代码并观察在该 javascript 函数中呈现的代码。你不会看到那行代码。 您要做的是对将执行您想要的逻辑的控制器进行 ajax 调用。

    【讨论】:

    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2015-10-10
    • 2020-06-23
    • 2012-08-13
    相关资源
    最近更新 更多