根据userID限制下拉选项

Bre*_*ett 8 javascript database asp.net ajax jquery

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

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

我想到的解决方案:

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

让我们说这是我的HTML:

<select>
<option>Please Select..</option>
<option value="101"> CC 101 </option>
<option value="102"> CC 102 </option>
<option value="103"> CC 103 </option>
<option value="104"> CC 104 </option>
<option value="105"> CC 105 </option>
<option value="106"> CC 106 </option>
</select> 
Run Code Online (Sandbox Code Playgroud)

这是我的数据库表:

=======================
|   User1    |  101   |
|   User2    |  101   |
|   User2    |  102   |
|   User2    |  103   |
|   User3    |  103   |
=======================
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ica*_*rus 5

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

user_id  |  value
---------+-------
user1    |  101
user1    |  102
user2    |  101
Run Code Online (Sandbox Code Playgroud)

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

我会避免使用jQuery简单地"隐藏"东西,因为Javascript可以被用户禁用,他可能最终提交他想要的任何值(可见或不可见) - 永远不要相信用户输入.

总之这样做:

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


Afz*_*han 2

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

下面我们开始编码。我会尽力解释我在写什么以及我是如何写的;因为你是新手:-)

为您提供的 HTML 代码

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

<select name="someName">
  <!-- No options please! -->
</select>
Run Code Online (Sandbox Code Playgroud)

获取用户ID

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

jQuery

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

<input type="hidden" id="userId" value="@WebSecurity.CurrentUserId" />
Run Code Online (Sandbox Code Playgroud)

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

var userId = $('#userId').val();
Run Code Online (Sandbox Code Playgroud)

网络平台

要使用 ASP.NET,您无需执行任何操作。您所要做的就是使用 ASP.NET 的内置方法作为

WebSecurity.CurrentUserId;
Run Code Online (Sandbox Code Playgroud)

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

的用法WebSecurity

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

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

这是使用 WebSecurity 的示例。就像在 jQuery 中创建变量并获取其值的方式一样。您使用此方法并获取值。

jQuery方法

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

WebSecurity.CurrentUserId 方法

var userId = WebSecurity.CurrentUserId;
Run Code Online (Sandbox Code Playgroud)

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

db.Query("SELECT * FROM UserProfile WHERE UserId =@0", userId);
Run Code Online (Sandbox Code Playgroud)

或者,将其写在文档中

Response.Write(userId);
Run Code Online (Sandbox Code Playgroud)

或者做任何你想做的事。您可以在 MSDN 的链接中了解该类的语法和其他内容。:-)

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
  }
});
Run Code Online (Sandbox Code Playgroud)

一旦完成。它将更新 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

<div>
  <!--empty div element -->
</div>
Run Code Online (Sandbox Code Playgroud)

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

PS 给出 Response 的其他方法(实际方法)是使用 Actuall HttpResponse 类,然后向其提供值。像这样

Response.Write("Hello World!");
Run Code Online (Sandbox Code Playgroud)

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

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