【发布时间】:2011-08-11 07:28:31
【问题描述】:
我正在尝试使用 ASP.NET MVC3 不显眼的 javascript 实现远程验证。
它似乎有效,但我可以提交我的表单,即使它不应该是有效的。
看起来验证的速度不够快。我正在使用带有 VS 2010 调试器的 ASP.NET 开发服务器,并且并不总是触发远程验证方法。稍等片刻,验证发生,我无法提交表单。
我开始认为客户端远程验证不够可靠,我可能应该考虑使用服务器端验证以确保应用正确的验证。
有没有办法解决这个问题?
编辑:
就像你问的那样,这是我的代码中与问题相关的部分。 我将首先听取您的建议并使用服务器端验证来避免用户绕过我的验证。
型号:
[Required(ErrorMessage = "*"), StringLength(50)]
[Remote("EventCategoryNameExists", "EventCategories",
AdditionalFields = "EventCategoryId",
ErrorMessageResourceType = typeof(Messages),
ErrorMessageResourceName = "EventCategoryNameAlreadyExists")]
[LocalizedDisplayName("Name")]
public string Name { get; set; }
查看:
<div id="formMain">
@Html.HiddenFor(x => x.EventCategoryId)
<fieldset class="formFieldset">
<legend>@Labels.EventCategoryDetails</legend>
<div class="formFieldsetContent">
<table id="formTable" class="formTable">
<tr>
<td class="formLabelCell" style="width: 90px;">
@Html.LabelFor(x => x.Name) :
</td>
<td class="formInputCell">
@Html.EditorFor(x => x.Name)
@Html.ValidationMessageFor(x => x.Name)
</td>
</tr>
<tr>
<td class="formLabelCell" style="vertical-align: top;">
@Html.LabelFor(x => x.Color) :
</td>
<td class="formInputCell">
@Html.EditorFor(x => x.Color)
@Html.ValidationMessageFor(x => x.Color)
</td>
</tr>
</table>
</div>
</fieldset>
</div>
<div class="formButtons">
<input type="submit" id="btnSave" value="@Labels.Save" class="formButton" />
<input type="button" id="btnCancel" value="@Labels.Cancel" class="formButton" />
</div>
控制器:
public ActionResult EventCategoryNameExists(int eventCategoryId, string name)
{
return Json(!_eventService.EventCategoryNameExists(eventCategoryId, name), JsonRequestBehavior.AllowGet);
}
【问题讨论】:
-
无论如何,你绝对 100% 应该使用服务器端验证,客户端验证是为了改善用户体验,而不是为了安全或确保有效性。
-
我完全同意其他 cmets,您应该始终进行服务器端验证。关于您的具体问题,也许您可以与我们分享一些验证码,以便我们尝试找出问题所在。
-
您使用什么方法提交表单?发布一些客户端代码,以便我们提供帮助。
标签: asp.net asp.net-mvc validation asp.net-mvc-3 unobtrusive-javascript