Bre*_*ett 8 javascript database asp.net ajax jquery
我问这个问题,因为我不确定解决问题的最佳方法.
问题:我有一个预先填充的下拉列表,其中包含1,000个左右的数字.我需要根据哪个用户使用下拉列表来限制下拉列表中显示的数字.
我想到的解决方案:
让我们说这是我的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或类似的东西.
我只会按你的方法的步骤2-3进行; 但是,我不会以你展示的方式存储这些数字.更好的方法是将它们存储在一个名为user_value的表中 - 或类似的东西 - :
user_id | value
---------+-------
user1 | 101
user1 | 102
user2 | 101
Run Code Online (Sandbox Code Playgroud)
只是因为您可以在将来轻松添加/删除/更新值,而不必解析逗号分隔的值.
我会避免使用jQuery简单地"隐藏"东西,因为Javascript可以被用户禁用,他可能最终提交他想要的任何值(可见或不可见) - 永远不要相信用户输入.
总之这样做:
user_value表中.如果这是示例数据库表和 Select 元素的示例。那么我认为最好的方法是不要自己编写任何内容,而让数据库选择共享内容和共享位置。
下面我们开始编码。我会尽力解释我在写什么以及我是如何写的;因为你是新手:-)
您的工作的 HTML 代码就这么简单
<select name="someName">
<!-- No options please! -->
</select>
Run Code Online (Sandbox Code Playgroud)
现在,用户登录后。尝试通过以下任一方法获取 UserId。
要使用 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({
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