所以,在您的代码中,您将需要通过某种方式了解是正在使用 GET 获取页面还是正在使用 POST 执行它。幸运的是,.NET Framework 支持检查谓词,而无需分解 HTTP 标头来检查您正在获取的数据类型,只需使用 If(IsPost) 检查语句,如果它为 true,则表明用户使用了一个窗体来发布信息。
以下为引用的内容: @{ 2: If(IsPost) 3: { 4: // Do something on the POST 5: } 6: } 7: |
当设置该窗体时,您为用户提交的值提供了名称(formName、formGenre、formYear)。当浏览器调用服务器时,它将使用此名称,方法是发送一条包含“formName=something”、“formGenre=something”、“formYear=something”等的消息。
所以,您首先将需要设置一些服务器变量来持有这些值,然后您从 HTTP POST 中读取它们。这比听起来简单得多:)
以下为引用的内容: @{ 2: var MovieName=""; 3: var MovieGenre=""; 4: var MovieYear=""; 5: if(IsPost){ 6: MovieName=Request["formName"]; 7: MovieGenre=Request["formGenre"]; 8: MovieYear=Request["formYear"]; 9: } 10: } |
在这里可以看到,设置了 3 个变量(MovieName、MovieGenre 和 MovieYear),它们使用用户提交的值进行了初始化。在下一步中,将添加代码来打开数据库并将此信息添加到其中。
添加到数据库
在上一部分中,当从数据库检索数据时,编写一个 SQL“SELECT”查询,它从数据库中选择数据供您读取。在这种情况下,您可以将数据添加到数据库,这会使用 insert 查询。
SQL INSERT 命令使用以下语法
INSERT INTO Table (Column1, Column2, ...ColumnN) VALUES (Value1, Value2, ... ValueN) |
我们看一下如何在代码中这样做:
以下为引用的内容: @{ 2: var MovieName=""; 3: var MovieGenre=""; 4: var MovieYear=""; 5: if(IsPost){ 6: MovieName=Request["formName"]; 7: MovieGenre=Request["formGenre"]; 8: MovieYear=Request["formYear"]; 9: var SQLINSERT = "INSERT INTO Favorites (Name, Genre, ReleaseYear) VALUES (@1, @2, @3)"; 10: var db = Database.Open("Movies"); 11: db.Execute(SQLINSERT, MovieName, MovieGenre, MovieYear); 12: } 13: } |
可以看到,我们创建了一个名为 SQLINSERT 的字符串来执行该命令。Razor 允许您在此字符串中指定参数化的值,所以无需尝试向字符串中添加“MovieName”、“MovieGenre”和“MovieYear”的值,我们只需使用 @1、@2 和 @3。当执行该查询时,该框架允许我们替换它们。您也可以“清除”参数之后在将它们输入到查询中。这可以防止人们将 SQL 代码作为参数传递,实施“SQL 注入攻击”。
接下来我们打开数据库,然后在数据库上调用 Execute 方法,告诉它运行此 insert 查询。相应值会被替换并添加到数据库中。
我们在 db.Execute() 之后添加另外一行代码,将用户重定向回他们可以查看最喜爱的电影的网页,他们可以看到所添加的结果。
Response.Redirect("dataMovies.cshtml");
现在运行网页,您将看到建立的窗体。向其中添加一些数据:
单击“Add Movie”按钮,服务器会将数据添加到数据库中,然后将您重定向回列表中查看结果,您可以看到已经添加了新的最喜爱的电影!
重要提示:在本部分中,您看到了如何获取用户输入并将其直接添加到数据库中。在学习基础知识过程中这么做没有问题,但在您部署生产网站之前,必须记住执行以下操作
- 检查输入参数是否为有效数据,为用户提供关于他们输入错误的内容的准确反馈。例如,如果他们没有为“Year”输入良好的值,应该向他们通知这一点,而不是允许将任何信息提交到数据库中
- 在输入参数中检查可能被恶意攻击者用于损坏数据库的值。一种常见的攻击称为“SQL 注入”,其中用户在窗体中发送 SQL 命令,服务器上的代码执行该命令,这可能损坏或泄露私有数据。
可以在以下网站中了解在 WebMatrix 中使用数据库的更多信息: https://www.asp.net/webmatrix/tutorials/5-working-with-data
小结
您现在了解了如何向电影数据库中添加数据。创建了一个 HTML 窗体来处理用户输入,并了解了如何直接向数据库中添加值。然后您了解了在添加数据之后,如何自动将用户重定向回列表网页中,以便查看他们添加的数据。
在下一部分中将更进一步,添加功能来允许用户编辑他们已经拥有的数据。
(举报)