如何将一个变量从视图传递给JavaScript函数?

本文关键字:视图 JavaScript 函数 变量 一个 | 更新日期: 2023-09-27 17:49:27

我在一个网站上工作,有一个JavaScript函数,我想调用在一个值传递当一个超链接被点击。我将在视图中生成一些表行,如下所示:

foreach(var e in Model.Collection)
{
    ...
    //This is just an example piece of code that tries to get the big picture
    //across. I want to call the JS function below passing in the ShipAddress property
    <td><a href="javascript:popup(@e.ShipAddress)">@e.ShippedDate</a></td>
    ...
}

我有一个这样的JavaScript函数:

function popup(data)
{
    $('#lblShipAddress').text(data.Address1);
    ...
    // rest of code to fill out labels in a div
    $('#divShipInfo').dialog('open');
}

我有问题获得ShipAddress属性(它有许多属性,即Address1, Address2等)从视图传递到JavaScript函数。的href="javascript:popup(@e.ShipAddress)"部分不起作用,我也尝试过使用数据属性,例如

<a href="javascript:popup();" data-shipAddress="@e.ShipAddress" />

但是运气不好。

编辑:为我正在寻找的东西添加了一些清晰度。如果可能的话,我只想将ShipAddress属性传递给函数。

如何将一个变量从视图传递给JavaScript函数?

默认情况下,只有@e.ShipAddress将返回等效的。tostring(),这对于您的方法作为输入是没有用的。相反,您将希望对对象进行JSON序列化,如:

<a href="javascript:popup(@Json.Encode(e.ShipAddress))">@e.ShippedDate</a>
这将导致最终html类似于:
<a href="javascript:popup({ Address1: 'Blah', Address2: ... })">@e.ShippedDate</a>

所以popup方法可以访问对象的值

警告:确保你的地址对象上没有任何你不想泄露给最终消费者的字段- Json。Encode将序列化所有公共属性

首先,我不会使用javascript:popup() -尝试其中一个。另外,不要在razor语法中使用引号,否则它可能不会计算变量。

如果这些都不能解决问题,那么可能是时间问题。我有很多问题与mvc控制的页面(而不是使用JavaScript/jQuery和回调)不更新,当你认为他们会。出于某种原因,MVC控制器处理按钮按下,运行服务器端代码,更新页面对象……然后将控制权释放给JavaScript,等等。

它基本上使得使用JavaScript与内置的Microsoft控件几乎不可能。