ASP Razor登录页面

时间:2015-04-21 22:05:41

标签: c# asp.net razor

我需要帮助为我的网站创建登录页面

@{
var db = Database.Open("database");

Validation.RequireField("Email","Required Field - Email");
Validation.RequireField("Password","Required Field - Password");

string Email = Request.Form["Email"];
string Password = Request.Form["Password"];

if (IsPost && Validation.IsValid()){
    if(ModelState.IsValid){
        var selectQueryString = "SELECT * FROM Members WHERE Email= @0 and Password @1";
        var result = db.Query(selectQueryString, Email, Password);
        int count = result.Count();
        if (count == 1){
            Response.Cache.SetNoStore();
            Response.Cache.SetNoServerCaching();

            foreach (var row in db.Query(result)){
                Session["FirstName"]=row.FirstName;
                Session["LastName"]=row.LastName;
                Session["Email"]=row.Email;
                Session["Telephone"]=row.telephone;
            }
            Response.Redirect("~/Home.cshtml");
        }
        else
        {
            <p>Invalid Username or Password</p> 
            <a href="~/"></a>
        }
    }
}}

在第19行(foreach部分),我收到以下错误:

错误CS1502:'WebMatrix.Data.Database.Query(string,params object [])'的最佳重载方法匹配有一些无效的参数

错误CS1503:参数1:无法从'System.Collections.Generic.IEnumerable'转换为'string'

我做了一些挖掘,但似乎无法找到任何想法?

2 个答案:

答案 0 :(得分:1)

db.Query会返回IEnumerable

来自result的{​​{1}}是IEnumerable

由于结果已经是var result = db.Query(selectQueryString, Email, Password),因此您不必再次致电IEnumerable。相反,您可以在foreach循环中迭代结果。

db.Query

答案 1 :(得分:0)

您将总共三个参数/参数传递给Query()方法:

  1. 查询字符串
  2. 电子邮件
  3. 密码
  4. 但是,最接近的匹配只需要两个参数:

    1. 查询字符串
    2. 参数的对象数组
    3. 另外,我注意到您的查询容易受到SQL注入攻击。您将要清理表单中的输入。