根据userID限制下拉选项

我问这个问题,因为我不确定解决问题的最佳方法。

问题:我有一个预先填充的下拉列表,其中包含1,000个左右的数字。 我需要根据哪个用户使用下拉列表来限制下拉列表中显示的数字。

我想到的解决方案:

  1. 使用jQuery隐藏所有数字
  2. 使用jQuery / AJAX调用数据库,传递userID
  3. DB根据userID返回值列表
  4. 显示下拉列表中与数据库返回的数字值相同的选项

让我们说这是我的HTML

 Please Select..  CC 101   CC 102   CC 103   CC 104   CC 105   CC 106   

这是我的数据库表

 ======================= | User1 | 101 | | User2 | 101 | | User2 | 102 | | User2 | 103 | | User3 | 103 | ======================= 

我需要弄清楚,例如,如何传递user2然后返回101,102,103。

我只知道基本的js / jQuery,而且我对DB不是很有经验,所以我欢迎任何可以帮助我实现最终目标的建议。

编辑/注意:这听起来很愚蠢….安全在这里并不是一件大事。 这将用于公司内部网站,如果用户觉得需要黑客攻击并选择不同的号码,那么这真的无关紧要。 我也没有预见到公司的任何员工有希望/需要/想要选择不同于他们允许的选项。

此外, 必须预先填充列表,然后隐藏数字。 它是我正在使用的平台的设置方式,因此我必须使用show / hide或类似的东西。

如果这是示例数据库表和Select元素的示例。 然后我认为最好的方法是不要自己编写任何内容 ,只需让数据库选择要共享的内容和共享内容。

我们在这里编码。 我将尝试解释我在写什么以及我是如何写作的; 因为你是新手:-)

HTML代码给你

你工作的HTML代码就这么简单

  

获得UserId

现在,一旦用户登录。尝试通过以下任何一种方法获取UserId。

jQuery的

要使用jQuery,您需要使用Server生成的值,因为jQuery不会干扰服务器请求和代码。 因此,您可以创建一个简单的隐藏输入,并为其提供当前登录用户的值。 这是一个例子

  

现在,使用jQuery,您可以获得此输入的值。 这将是代码

 var userId = $('#userId').val(); 

ASP.NET

要使用ASP.NET,您不会执行任何操作。 您所做的只是使用ASP.NET的内置方法

 WebSecurity.CurrentUserId; 

它会给你一个整数值。 哪个是当前登录用户的userId。

WebSecurity用法

WebSecurity如下面的链接所述,是一类数据。 可以在您的应用程序中使用,以减少代码并帮助您以更好的速度获得用户的属性。

此类用作变量的值,或用作参数。 此方法将返回特定用户的属性。 例如,您可以获取User的UserId,他的UserName,他的CreateDate,或者您可以使用WebSecurity登录用户,或者将他注销。

这将是使用WebSecurity的示例。 就像你在jQuery中创建一个变量并获得它的价值一样。 您使用此方法并获取值。

jQuery方法

 var userId = $('someElement').val(); /* get the value of some element as userId */ 

WebSecurity.CurrentUserId方法

 var userId = WebSecurity.CurrentUserId; 

然后你可以在数据库查询中使用它,

 db.Query("SELECT * FROM UserProfile WHERE UserId =@0", userId); 

或者,将其写在文档中

 Response.Write(userId); 

或者做你想做的事。 您可以在MSDN的链接中学习Class和其他内容的语法。 🙂

http://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity(v=vs.111).aspx

发送Ajax请求

现在发送Ajax请求。 如果你知道,那就太棒了! 如果没有,那么这是要发送的Ajax请求的示例

 $.ajax({ url: 'page_url', data: 'userId=' + userId, // userId that you got from input success: function (data) { // note the data parameter /* write in the select statement */ $('select').html(data); // usage of data parameter } }); 

一旦完成。 它会更新Select元素的选项。 但等等,它会增加什么?

是你,谁也控制它。 您将服务器端代码编辑为以下内容。

从数据库获取数据。

如果您是数据库和ASP.NET的新手,您需要先学习一下。

http://www.asp.net/web-pages/tutorials/data/5-working-with-data

好的,你也可以稍微了解一下。 我仍然会向你解释我的所有代码。 🙂

因此,对于数据库,首先需要创建与数据库的连接,然后您可以搜索其表和其他内容。 这是代码

 var db = Database.Open("databaseName"); // Open a connection var userId = Request.QueryString["userId"]; // get userid from ?userId=int var selectQuery = "SELECT * FROM table_name WHERE UserId =@0"; // Query var results = db.Query(selectQuery, userId); // Get data in a variable 

获取所有这些值后,您需要做的就是创建一个响应,发送给客户端。

我希望,你正在使用网页技术。 好! 你在这里比其他人更安全一步。

只需按Page Down并向下移动到最后几行并创建一个新的Div元素

 

现在,在其中编写if else语句并创建一个将添加到select元素的Response。

PS发出响应的其他方法(实际方法)是使用Actuall HttpResponse类,然后给它赋值。 像这样

 Response.Write("Hello World!"); 

如果您编写上面的行,它会将此字符串添加到您的select语句( 虽然非法 ),但这将使您了解其用法。

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.aspx

我只会按你的方法的步骤2-3进行; 但是,我不会以您展示的方式存储数字。 更好的方法是将它们存储在一个名为user_value的表中 – 或类似的东西 – :

 user_id | value ---------+------- user1 | 101 user1 | 102 user2 | 101 

只是因为您可以在将来轻松添加/删除/更新值,而不必解析逗号分隔的值。

我会避免使用jQuery简单地“隐藏”东西,因为用户可能会禁用Javascript,并且他最终可能会提交他想要的任何值(可见或不可见) – 绝不信任用户输入。

总之这样做:

  1. 使用jQuery / AJAX调用数据库,传递userID
  2. DB根据userID返回值列表
  3. 使用从数据库返回的值填充下拉列表。
  4. validation服务器端的表单以确保提交的值存在于user_value表中。

我对你的约束仍然有点困惑,但根据你的评论:

该列表将预先填充客户端(从我无法访问/修改的服务器)然后AJAX调用另一个DB(简单,两列)然后将值返回到原始AJAX调用,其中THEN JS隐藏值未返回(或显示返回的值,如果它们最初是隐藏的。)

为什么不创建一个“统一”服务(在服务器上),这样你只能进行一次AJAX调用(来自客户端)?

http://MySite/MyService.aspx/GetOptionsForUser(101)

此服务将调用两个数据库,并返回给定用户ID的允许选项列表。 这使服务器可以完成大部分繁重工作,并大大减少客户端上的jQuery数量。

更多信息:

URL是jQuery用于进行AJAX调用的URL。

最简单的事情是:

  1. 创建一个名为http://mySite/MyService.aspx的网页
  2. 添加一个名为GetOptionsForUser()的公共方法,该方法接受一个整数并返回一个数字列表。 这是查询两个数据库的“统一”逻辑。 通过添加WebMethod属性使方法AJAX可调用。
  3. 在要填充下拉列表的现有网页中,对http://MySite/MyService.aspx/GetOptionsForUser进行AJAX调用,并将用户ID作为AJAX参数传递。

我认为一个好方法就是为所有用户使用JSON。 为具有选项的用户准备json数组,并根据用户对其进行渲染以填充选项。 例如。

 var user1 = '["101","102","103"]'; 

这是一个示例,显示了jquery ajax和php如何收集:

例如,当一个按钮点击一个ajax发送命令到服务器端语言(php),并且php proccess那个命令并显示一个合适的响应:

 $("#button").click(function(){ $.ajax({ type:"POST", url:"ajax/alertMe.php", data:({alert:"yes"}), // The alert ^^ is the name of $_POST variable in php success:function(data){ //this data can be some javascript and HTML codes or a text and ... evel(data); } }); }) 

这里是名为alertMe.php的php代码:

  

既然你说的是 – 你已经预先填充了条目,我会采用这种方法 –

  1. 首先在页面加载时保存JS数组中的所有项目 –

      var alloptions = $("select").find("option").get(); 
  2. 然后在获取项目列表后为每个用户ID显示并隐藏它们如下 –

      //getting the id of the user and passing to AJAX call $.ajax({ url: '', dataType: 'json', type: 'GET', success:function(data){ // other codes var userItemList = []; //list of items for this user [102,103, etc] $("select").empty(); $("select").append(alloptions[0]) //the first one since it is the null one for(var i = 0; i < userItemList.length; i++){ for(var j = 0; j < alloptions.length; j++){ if (parseInt($(alloptions[j]).val()) == userItemList[i]){ $("select").append(alloptions[j]); } } } } }); 

如果您只需要在第一页加载时填充一次,这是我的最佳选择

例:

 HTML:  echo ""; while ($item = mysql_fetch_assoc($result)) { echo ""; } ?>  

编辑:我看到你需要asp.net所以尝试转换它

直截了当的问题。 我会尽力以您自己的方式回答您的想法。

0.您现有的HTML代码

 Choose your Value:  

1.使用jQuery隐藏所有数字

  

2.使用jQuery / AJAX调用数据库,传递userID& 3。DB根据userID返回值列表

  

4.显示下拉列表中与数据库返回的数字值相同的选项

  for (var i=0; i CC "+returnData[i]+" "); } } }); });