C# 如何在MVC4中执行远程验证而不使用实体框架
我已经用MVC开发了一个没有实体框架的web应用程序。在我的应用程序中,我想执行远程验证来检查用户名是否已经存在。在大多数博客中,他们使用实体框架数据模型来实现这一点,而我希望使用sql命令来实现这一点。然而,我无法实现预期的验证 这是我的密码: 模型、控制器、视图代码 模式: 控制器:C# 如何在MVC4中执行远程验证而不使用实体框架,c#,asp.net-mvc,validation,asp.net-mvc-4,C#,Asp.net Mvc,Validation,Asp.net Mvc 4,我已经用MVC开发了一个没有实体框架的web应用程序。在我的应用程序中,我想执行远程验证来检查用户名是否已经存在。在大多数博客中,他们使用实体框架数据模型来实现这一点,而我希望使用sql命令来实现这一点。然而,我无法实现预期的验证 这是我的密码: 模型、控制器、视图代码 模式: 控制器: [HttpGet] public ActionResult RemoteValidation() { return View(); } [HttpPost]
[HttpGet]
public ActionResult RemoteValidation()
{
return View();
}
[HttpPost]
public ActionResult RemoteValidation(RemoteValidation rv)
{
if (ModelState.IsValid)
{
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlCommand cmd = new SqlCommand("Insert into AdminSignup (UserName,Password) Values ('"+rv.UserName+"','"+rv.Password+"')", conn);
cmd.ExecuteNonQuery();
conn.Close();
}
return View();
}
public JsonResult ValidateUserName(string UserName)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand("Select*from AdminSignup Where UserName='"+UserName+"'", conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
if (dr.HasRows == true)
{
return Json("User Name Already Exist", JsonRequestBehavior.AllowGet);
}
}
return Json(true, JsonRequestBehavior.AllowGet);
}
视图:
@使用(Html.BeginForm())
{
@Html.TextBoxFor(m=>m.UserName)
@Html.ValidationMessageFor(x=>x.UserName)
@Html.PasswordFor(m=>m.Password)
@Html.ValidationMessageFor(x=>x.Password)
}
我不知道为什么我无法获得任何输出。请帮助我并建议如何实现这一点。您是否已将web.config配置为启用验证
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
使用浏览器开发人员工具查看生成的HTTP流量
请查看参数化查询和SQLCommand-永远不要在网站中手动生成SQL字符串-它会让您面临SQL注入攻击。除了您自己暴露的事实之外,您还有什么问题?您是否包含客户端验证的相关脚本?您正在点击控制器方法吗?是的,我在视图中包含用于客户端验证的脚本文件,但我无法获取validation消息..以及modelstate.isvalid获取true!您是否点击了
ValidateUserName()
方法?并且ModelState
将始终为真-RemoteAttribute
仅为客户端验证,您的属性上没有其他验证属性无需如何获取?
@model TestMvc.Models.RemoteValidation
<body>
@using (Html.BeginForm())
{
<div>
@Html.TextBoxFor(m=>m.UserName)
@Html.ValidationMessageFor(x=>x.UserName)
</div>
<div>
@Html.PasswordFor(m=>m.Password)
@Html.ValidationMessageFor(x=>x.Password)
</div>
<div>
<input type="submit" value="Check" />
</div>
}
</body>
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>