我正在尝试在验证视图模型的同一阶段验证用户名,其余的验证工作正常,但我正在尝试使用以下代码段来检查用户名是否已在使用中:
// Cut down code to keep it simple.
public class UserAccountRegistration
{
[Remote("CheckUsername", "Validation", ErrorMessage = "Username already exists.")]
public string Username { get; set; }
}
我在Controllers目录中有一个名为“ValidationController.cs”的控制器,该控制器包含以下内容:
using System;
using System.Web.Mvc;
using Test.Helpers;
using System.Data.SqlClient;
using System.Data;
namespace Test.Controllers
{
public class ValidationController : Controller
{
// GET: Validation
public ActionResult Index()
{
return View();
}
[HttpGet]
public JsonResult CheckUsername(string Username)
{
Encryption hlpEncryption = new Encryption();
DataConnections hlpDBConn = new DataConnections();
bool bUsernameAlreadyExists = false;
string sEncUsername = hlpEncryption.Encrypt(p_sUsername);
SqlConnection conn = hlpDBConn.DBConnection();
using (SqlCommand cmd = new SqlCommand("CheckIfUsernameExists", conn) { CommandType = CommandType.StoredProcedure })
{
cmd.Parameters.AddWithValue("@Username", sEncUsername);
conn.Open();
bUsernameAlreadyExists = (Convert.ToInt16(cmd.ExecuteScalar()) > 0);
conn.Close();
}
return Json(bUsernameAlreadyExists, JsonRequestBehavior.AllowGet);
}
}
}
然而,CheckUsername
方法甚至没有被击中,我做错了什么?
谢谢。
答案 0 :(得分:1)
模型上的属性名称和CheckUsername函数的参数必须相等。我认为它们不区分大小写。 试试:
public JsonResult CheckUsername(string Username)
{
//change p_sUsername for Username
//...
}
答案 1 :(得分:1)
让我们仔细检查一下:
您已在布局(最好)中按顺序正确引用了以下库:
<script src="~/Scripts/jquery-2.2.3.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
在您的网络配置文件中,您有:
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
在你看来像:
@Html.LabelFor(m => m.Username)
@Html.TextBoxFor(m => m.Username)
@Html.ValidationMessageFor(m => m.Username)
更重要的是,在您第一次单击提交之前,删除验证不会触发。您需要在&lt;中包含先前的文本。形式&GT;使用提交按钮可以验证用户名。它不会自动为Regex,Required或StringLength。我认为这样可以避免请求服务器,直到用户确定是他想要的用户名。
答案 2 :(得分:0)
RandomAccessFile
但这可能会导致模型绑定问题,因为您的属性为<input type="text" name="p_sUsername" />
,因此最佳做法是保持所有属性相同。