Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改密码ASP.NET_C#_Asp.net Mvc 3 - Fatal编程技术网

C# 更改密码ASP.NET

C# 更改密码ASP.NET,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我在ASP.NET MVC3中的一个应用程序中工作,我试图让用户更改密码,但我不知道为什么我的代码不起作用。 我把代码附在这里 模型类: public class CambioContraseña { [Required] [DataType(DataType.Password)] [Display(Name = "Contraseña actual")] public string ContraseñaVieja { get; set; } [Requ

我在ASP.NET MVC3中的一个应用程序中工作,我试图让用户更改密码,但我不知道为什么我的代码不起作用。 我把代码附在这里

模型类:

public class CambioContraseña
{
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Contraseña actual")]
    public string ContraseñaVieja { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "La contraseña debe tener un minimo de 6 caracteres.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Contraseña nueva")]
    public string ContraseñaNueva { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Confirma nueva contraseña")]
    [Compare("ContraseñaNueva", ErrorMessage = "La nueva contraseña y la contraseña de confirmación no coinciden.")]
    public string ConfirmarContraseñaNueva { get; set; }
}
控制器类:

[Authorize]
    public ActionResult CambiarContraseña()
    {
        return View();
    }

    //
    // POST: /Account/ChangePassword

    [Authorize]
    [HttpPost]
    public ActionResult CambiarContraseña(CambioContraseña model)
    {
        if (ModelState.IsValid)
        {
            LogOn logon = new LogOn();
            Registro registro = new Registro();
            // ChangePassword will throw an exception rather
            // than return false in certain failure scenarios.
            bool cambioContraseñaCorrecto;
            try
            {
                //MembershipUser usuarioActual = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);
                //cambioContraseñaCorrecto = usuarioActual.ChangePassword(model.ContraseñaVieja, model.ContraseñaNueva);
                cambioContraseñaCorrecto = logon.ExisteUsuario(registro.idUsuario);
                SqlConnection connection = new SqlConnection(
System.Configuration.ConfigurationManager.ConnectionStrings["cs"].ConnectionString);
                connection.Open();
                SqlCommand command = new SqlCommand("update Usuario set contraseña='" + model.ContraseñaNueva + "' where idUsuario='" + registro.idUsuario + "'", connection);
                object comandoRetorno = command.ExecuteScalar();
                connection.Close();


            }
            catch (Exception)
            {
                cambioContraseñaCorrecto = false;
            }
            if (cambioContraseñaCorrecto)
            {
                return RedirectToAction("CambioContraseñaCorrecto");
            }
            else
            {
                ModelState.AddModelError("", "La actual contraseña es inválida o la nueva contraseña es incorrecta.");
            }
        }
        // If we got this far, something failed, redisplay form
        return View(model);
    }
视图类:

@model FutbookPFC.Models.CambioContraseña

@{
ViewBag.Title = "Futbook / Configuración";
Layout = "~/Views/Shared/_LayoutGenerico.cshtml";
}

<h2>CambiarContraseña</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"   type="text/javascript">    </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
@Html.ValidationSummary(true, "Cambio de contraseña incorrecto. Por favor, corrige los errores e intentelo de nuevo.")
<div>
    <fieldset>
        <legend>Contraseña</legend>

        <div class="editor-label">
            @Html.LabelFor(m => m.ContraseñaVieja)
        </div>
        <div class="editor-field">
            @Html.PasswordFor(m => m.ContraseñaVieja)
            @Html.ValidationMessageFor(m => m.ContraseñaVieja)
        </div>

        <div class="editor-label">
            @Html.LabelFor(m => m.ContraseñaNueva)
        </div>
        <div class="editor-field">
            @Html.PasswordFor(m => m.ContraseñaNueva)
            @Html.ValidationMessageFor(m => m.ContraseñaNueva)
        </div>

        <div class="editor-label">
            @Html.LabelFor(m => m.ConfirmarContraseñaNueva)
        </div>
        <div class="editor-field">
            @Html.PasswordFor(m => m.ConfirmarContraseñaNueva)
            @Html.ValidationMessageFor(m => m.ConfirmarContraseñaNueva)
        </div>

        <p>
            <input type="submit" value="Cambiar Contraseña" />
        </p>
    </fieldset>
</div>
@model FutbookPFC.Models.CambioContraseña
@{
ViewBag.Title=“Futbook/Configuración”;
Layout=“~/Views/Shared/_LayoutGenerico.cshtml”;
}
坎比亚康特塞尼亚
@使用(Html.BeginForm()){
@Html.ValidationSummary(true,“Cambio de contraseña incorrecto.Por four,corring los errors e intententelo de nuevo.”
康瑟斯尼娜
@LabelFor(m=>m.ContraseñaVieja)
@Html.PasswordFor(m=>m.ContraseñaVieja)
@Html.ValidationMessageFor(m=>m.ContraseñaVieja)
@Html.LabelFor(m=>m.ContraseñaNueva)
@Html.PasswordFor(m=>m.ContraseñaNueva)
@Html.ValidationMessageFor(m=>m.ContraseñaNueva)
@Html.LabelFor(m=>m.ConfirmarContraseñaNueva)
@Html.PasswordFor(m=>m.confirmarcontraceñaNueva)
@Html.ValidationMessageFor(m=>m.confirmarcontraceñaNueva)

}

有办法解决吗?
谢谢

我猜您应该在updatewhere语句中使用带有国际字符的名称。 因此,如果用户名保存为varchar(您没有N'),它将找不到任何内容,这意味着它不会更新任何内容

提示:
在用户名=
'abcñxyz'
的任何位置更新T_
而不是
在用户名=
N'abcñxyz'
的任何位置更新T_

PS:
我可以使用SQL注入创建自己的用户。
尝试用户名或密码:d'Alambert

此外,您应该使用IDbConnection和IDbCommand,而不是SqlConnection和SqlCommand,因为否则,您不必在更改数据库后只更改SQL

并尝试将类用于数据库访问函数

此外,使用存储过程而不是硬编码SQL字符串。
这样,您就可以修复SQL错误(例如,提高其性能),而无需在应用程序部署到生产环境后重新编译应用程序


此外,您还可以使用registro.idUsuario,而不会将类初始化为默认值以外的值。

与不为sql命令使用参数有关吗?