通过 Javascript 设置 C# 属性值

Set C# Property Value by Javascript

本文关键字:属性 设置 Javascript 通过      更新时间:2023-09-26

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

我正在尝试设置值类别 ID,如下所示:

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(在 else 块中)的值。

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

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

编辑:

如果你仍然想知道你怎么可能得到一个值,请参阅迈克对这一事实的解释。但事实仍然存在。你不能。这不可能。如果你想知道更长的解释,看看 asp.net 是如何工作的,它的生命周期等。简单的说法是这样的:

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

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

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

有什么理由不能在页面加载的代码隐藏中完成所有这些操作吗? 你觉得这必须在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
%>

不能从客户端脚本设置 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;
  }
}