0

我有一个 C# 属性CategoryID,我想在 Javascript 中设置它的值。

我正在尝试设置值CategoryID,如下所示:

var sPath = window.location.pathname;
var catId = null;

var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
if (sPage == 'xyz.aspx')
{
    <%=CommonUtility.CategoryID=4%>;
}
else if(sPage == 'zxy.aspx')
{
    <%=CommonUtility.CategoryID=5%>;
}

但是通过这种方法,我总是得到CategoryID = 5(which is in else block) 的值。

请建议我如何根据条件获取属性值。

4

3 回答 3

4

您不能从客户端 (js) 设置 C# 属性。您可以使用 ajax 做一些工作,但您根本无法操作服务器端代码。

编辑:

如果您仍然想知道如何获得价值,请参阅 Mike 对这一事实的解释。但真相依然存在。你不能。不可能。如果您想了解更长的解释,请查看 asp.net 的实际工作原理,它的生命周期等。简单的说法是这样的:

用户使用他的浏览器向服务器发送请求。服务器接收它,创建一个请求的页面并实例化所需的类等。然后它被解析并作为 html 发送到客户端(当然还有其他资源,如图像、css ......)。实例化的页面类以后不能被客户端访问和修改,因为它已经被服务器刷新了。每个请求都会创建一个新实例。无论如何,没有办法将 js 与 c# 交互。如果您可以使用一些 js 在远程服务器上修改 C#,您能想象会是什么样子吗?这根本没有意义。

于 2012-08-17T18:50:49.387 回答
1

您不能以这种方式使用客户端脚本在代码隐藏中设置属性。这样做的唯一方法是使用 AJAX 将数据发送到您的服务器,尽管我很确定这不适合您的情况。

当您调用<%=CommonUtility.CategoryID = 4%>时,服务器在解析页面时实际上会执行该语句,然后再将其发送给客户端。属性值为 5 的原因是这两个语句都会被执行,而不管 Javascriptif块中的逻辑如何。在服务器已经解析了这两个标签之前,浏览器实际上不会执行您的客户端代码,此时无论如何完成您想要的东西都为时已晚。

是否有任何理由您不能在页面加载时的代码隐藏中完成所有这些操作?有什么理由让你觉得这必须在 JS 中处理吗?

编辑:

如果您无法访问代码隐藏文件(.aspx.vb 或 .aspx.cs),则只需使用 .aspx 页面顶部的服务器脚本块

<% 
    If (Request.Path.ToLower().Contains("xyz.aspx")) Then
        CommonUtility.CategoryId = 4
    ElseIf (Request.Path.ToLower().Contains("zxy.aspx")) Then
        CommonUtility.CategoryId = 5
    End If
%>
于 2012-08-17T18:54:46.507 回答
0

您不能从客户端脚本设置 C# 变量,因为所有服务器代码首先运行,然后页面被发送到浏览器。

客户端代码最终将如下所示:

var sPath = window.location.pathname;
  var catId = null;

  var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
  if (sPage == 'xyz.aspx')
  {
    4;
  }
  else if(sPage == 'zxy.aspx')
  {
    5;
  }
}
于 2012-08-17T18:57:23.750 回答