【问题标题】:Send @Model variable as parameter to a JavaScript function将 @Model 变量作为参数发送到 JavaScript 函数
【发布时间】:2014-10-05 21:35:02
【问题描述】:

从“更新”开始阅读

我有一个 JavaScript 函数:

<script type="text/javascript">
    function getAmount(AdminFee, TimeAndMatRate, TimeSpent, MinimumCharge) {
        var amount = math.Round(AdminFee + TimeAndMatRate * TimeSpent);
        if (amount < MinimumCharge) {
            amount = math.Round(MinimumCharge);
        }
        document.getElementById('amount').innerHTML = amount;
    }
</script>

当我更改另一个值时,我必须更改以下字段:

 <span id="amount"></span>

当我更改此 文本框 中的值时,应更新上述字段:

 @Html.TextBoxFor(model => model.TimeAndMaterialsRate, new { onkeyup = "getAmount()" })

只要我不尝试在getAmount() 中发送任何参数,此代码就可以正常工作,但我似乎无法弄清楚如何让它工作,有人可以帮我吗?

这是我尝试过的事情之一

 new { onkeyup = "getAmount("
     + @Model.AdminFee + ","
     + @Model.TimeAndMaterialsRate + ","
     + @Model.TotalTimeSpent.Hours + ","
     + @Model.MinimumCharge + ")"
 }

我也试过上面没有'@'s

更新:

上面的代码现在可以工作了,虽然这个功能似乎不能正常工作。

<script type="text/javascript">
    function getAmount(AdminFee, TimeAndMatRate, TimeSpent, MinimumCharge) {
        var amount = math.Round(AdminFee + TimeAndMatRate * TimeSpent);
        if (amount < MinimumCharge) {
            amount = math.Round(MinimumCharge);
        }
        document.getElementById('amount').innerHTML = amount;
    }
</script>

传入函数的值为ididdoubleid。关于为什么这不起作用的任何线索?

【问题讨论】:

  • Razor 代码在发送到视图之前在服务器上进行解析,因此您所做的只是运行相同的计算并在每个 keyup 事件上输出相同的结果 - 您永远不会使用 @987654332 的值@ 表示用户已输入!。你应该学会使用Unobtrusive_JavaScript

标签: javascript c# html asp.net-mvc model-view-controller


【解决方案1】:

我认为您的问题是字符串末尾的轻微语法错误。最后一个加号在错误的地方。应该是这样的:

new { onkeyup = "getAmount("+@Model.AdminFee+","+@Model.TimeAndMaterialsRate+","+@Model.TotalTimeSpent+","+@Model.MinimumCharge+")" })

【讨论】:

  • 对不起,我实际上在帖子中编辑了它,因为我从我的原始代码中删除了它,无论如何谢谢
  • 在这种情况下,您的 javascript 中的情况有误。它的 Math.round() 不是 math.Round()
【解决方案2】:

我会说使用 eval,但这是一种非常糟糕的做法,因为它可以真正注入 & 东西。

看这篇文章http://www.sitepoint.com/call-javascript-function-string-without-using-eval/

你需要的是:

// function name and parameters to pass
var fnstring = "runMe";
var fnparams = [1, 2, 3];

// find object
var fn = window[fnstring];

// is object a function?
if (typeof fn === "function") fn.apply(null, fnparams);

你的参数看起来像:

var fnparams = {
minimumCharge : '@Model.MinimumCharge', 
... // and so on
};

你会以这种方式得到它们:

parseInt(fnparams.minimumCharge); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

【讨论】:

    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2018-10-10
    • 2012-11-23
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    相关资源
    最近更新 更多