如果是重定向则检查对象列表是否为真,如果不是抛出错误警告

时间:2016-03-12 14:39:56

标签: asp.net asp.net-mvc razor

嗨我需要检查控制器中的登录名和密码是否正确如果我想重定向到索引页,如果没有在浏览器中抛出错误警告。但问题是我不知道如何将对象列表转换为布尔值。而且我也不知道如何通过控制器更改按钮的文本,如下所示:button1id.Text = "User or password is in correct not found";它给了我错误。请你能帮帮我吗?

如果它给我这个错误:

  

错误1无法隐式转换类型' System.Collections.Generic.List< SmartAdvertising.Entities.Login>'到了布尔'

并且在其他方​​面给了我这个错误:

  

错误2名称' button1id'在当前上下文中不存在

LoginController:

[HttpGet]
public ActionResult Login()
{
    return View("Login", "_LayoutLogin");
}

[HttpPost]
public ActionResult Login(string uzivatel, string heslo)
{
    List<Login> list = LoginServiceLayer.Instance.SelectByJmenoHeslo(uzivatel, heslo);
    if (list)
    {
        Response.Redirect("Index");  
    }
    else
    {
        button1id.Text = "User or password is in correct not found"; 
    }
}

我在控制器中使用的数据库层的功能:

public List<Login> SelectByJmenoHeslo(string jmeno, string heslo)
{
    string passwords = e.encryption(heslo);
    string queryString = "SELECT jmeno, heslo from Login where (jmeno = '" + @jmeno + "') AND (heslo = '" + @passwords + "');";  
    SqlCommand command = new SqlCommand(queryString, Connection);
    command.Parameters.AddWithValue("@jmeno", "");
    command.Parameters.AddWithValue("@passwords", "");
    try
    {
        SqlDataReader reader = command.ExecuteReader();
        List<Login> login = new List<Login>();
        while (reader.Read())
        {
            Login l = new Login();
            l.jmeno = reader[0].ToString();
            l.heslo = reader[1].ToString();
            Console.WriteLine("jmeno: " + l.jmeno + " " + "heslo: " + " " + " " + l.heslo);
            login.Add(l);
        }
        reader.Close();
        return login;
    }
    catch (Exception ex)
    {
        chyba.zapsat_do_souboru(ex.Message);
        Console.OpenStandardOutput();
        Console.WriteLine(ex);
        return null;
    }
}

并查看:

@using (Html.BeginForm("Login", "Login", FormMethod.Post, new { @area = "Home", @role = "form" }))
{
    <input id="textinput" name="jmeno" type="text" placeholder="login" class="form-control input-md" required="">

    <input id="textinput" name="heslo" type="text" placeholder="heslo" class="form-control input-md" required="">

    <a href="@Url.Action("Login", "Login")">
        <input type="submit" id="button1id" value="Pokračovat" name="button1id" class="btn btn-success">
    </a>
}

1 个答案:

答案 0 :(得分:2)

我不想看起来很苛刻,但你有什么想法与你合作吗? Asp.Net MVC中没有按钮,因为View(MVC的V)没有用户控件的概念。而且你似乎不明白你所调用的方法会让你回来。

AFAICT,如果该方法返回一行,你可以说登录没问题,所以你可以改变你的行:

if (list)

if (list.Count == 1)

但是,您仍然没有处理身份验证:在登录页面之后,用户应该以某种方式(例如,使用cookie)“知道”到服务器。 所以你还需要这样的东西:

FormsAuthentication.SetAuthCookie(list[0]);

如果,即您正在使用表单身份验证。 见这里:https://msdn.microsoft.com/it-it/library/system.web.security.formsauthentication.setauthcookie%28v=vs.110%29.aspx

在你的别人身上,你需要这样的东西:

{
    ViewBag.ErrorMessage = "Wrong username or password";
    return View();
}

您需要在视图上打印标签,公开ErrorMessage。

简单地说,你的问题太宽泛了,唯一正确的答案是:抓一本关于Asp.Net MVC的好书(也可能是另一篇关于C#或一般编程的书),并从头到尾阅读...... / p>

编辑:我没有特别注意您的数据库代码。在很多方面,我的眼睛出血是错误的。说真的,请拿一本书。