2

我一直在寻找我的问题的明确答案,但找不到。很多网站都涵盖了该主题,但我找不到我正在寻找的答案。

例如,我有一个处理客户查询的 ASPX 页面。在后面的代码中,我有一个 Customer 类。例如,如果我想在 JavaScript 函数中使用客户 ID 和名称。对我来说最好的方法是什么?

我有这个代码(一个我被要求更新的网站),但我尝试整理所有警告 VS 显示,这个代码显示两个。

<script type="text/javascript">
function DoSomeThingFunction(enable)
{
    var enableStr = enable ? "on" : "off";
    var intClientID = <%= Customer.ClientID %>;
    var strClientName = <%= Customer.ClientName %>;

    <!--
        More functionality
    -->

};
</script>

以下两行的预期表达式..

var intClientID = <%= Customer.ClientID %>;
var strClientName = <%= Customer.ClientName %>;

我可以更新此代码以停止警告..

<script type="text/javascript">
function DoSomeThingFunction(enable)
{
    var enableStr = enable ? "on" : "off";
    var intClientID = parseInt('<%= Customer.ClientID %>');
    var strClientName = '<%= Customer.ClientName %>';

    <!--
        More functionality
    -->

};
</script>

我的问题是:在没有任何警告的情况下实现这一目标的最佳方法是什么?最好的方法是否意味着我会收到警告并因此不得不忍受它?我讨厌看到任何形式的警告并尝试将它们全部修复。

感谢您的关注

4

3 回答 3

1

第一个代码块是我过去的做法。如果值是单引号或双引号的字符串。数字没有引号是可以的。

另一种方法是在页面中使用隐藏字段。

<input type="hidden" id="customerId" value="1234" />
<input type="hidden" id="customerName" value="John Doe" />

<script type="text/javascript">
function DoSomeThingFunction(enable)
{
    var enableStr = enable ? "on" : "off";
    var intClientID = $('input#customerId').val(); //using jQuery to retrieve the value
    var strClientName = $('input#customerName').val();

    <!--
        More functionality
    -->

};
</script>

我不担心 VS 警告,事实上我很少看它们。大多数情况下,代码仍会按预期工作,尤其是在涉及 html、css 和 javascript 时,警告已过时。

于 2012-08-17T15:18:45.583 回答
1

我将使用以下代码(例如在预渲染中)来注册变量:

Page.ClientScript.RegisterClientScriptBlock(GetType(), "variables", 
  String.Format("var intClientID = {0};var strClientName = '{1}';", 
     Customer.ClientID, 
     Customer.ClientName), 
   true);
于 2012-08-17T15:20:39.237 回答
0

如果您知道 ClientID 是一个整数并且 ClientName 是一个字符串,那么您拥有的第二个代码块会好得多。我认为 VS 中的 JS 验证器会看到分配,并且由于它无法确认 <%=...%> 是数字数据类型,因此它希望看到它周围的引号。此外,如果 ClientName 实际上是一个字符串,那么您的 JS 无论如何都会在运行时失败,因为该字符串需要用引号引起来。

于 2012-08-17T15:17:52.307 回答