我似乎无法在MVC 2 RC应用程序上进行任何客户端验证。
我的模型有以下内容:
public class ExampleModel
{
[Required(ErrorMessage="Test1 is required")]
[DisplayName("Test1")]
public string Test1 { get; set; }
[Required(ErrorMessage="Test2 is required")]
[DisplayName("Test2")]
public string Test2 { get; set; }
}
我的观点包含以下代码:
<% Html.EnableClientValidation(); %>
<%= Html.ValidationSummary(true, "Test was unsuccessful.") %>
<% using (Html.BeginForm()) { %>
<div>
<div class="editor-label">Test1:</div>
<div class="editor-field">
<%= Html.TextBoxFor(m => m.Test1) %>
<%= Html.ValidationMessageFor(m => m.Test1) %>
</div>
<div class="editor-label">Test2:</div>
<div class="editor-field">
<%= Html.TextBoxFor(m => m.Test2) %>
<%= Html.ValidationMessageFor(m => m.Test2) %>
</div>
<p>
<input type="submit" value="Test" />
</p>
</div>
我将这两个字段留空并单击“测试”按钮,它会直接进入控制器的后处理程序,而不会发生客户端验证。我不确定我错过了什么。
我在视图中也包含以下javascript(不确定是否需要全部):
<link href="../../Scripts/jquery-1.3.2.min.js" type="text/javascript" />
<link href="../../Scripts/jquery.validate.min.js" type="text/javascript" />
<link href="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript" />
任何想法我做错了什么。我觉得我错过了一些简单的东西,MVC 2的文档很少。
修改:我添加了链接:
<link href="../../Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" />
我已将该文件包含在我的项目中,我必须从答案中的链接下载。仍然没有工作。还有其他想法吗?
编辑:我正在使用带有MVC 2 RC的Visual Studio 2008(不是测试版),我正在寻找任何可下载或发布的客户端验证示例RC发布。
答案 0 :(得分:7)
从MVC 2 Beta更新项目时,请使用MVC 2 RC源代码包(link)中的 /src/MvcFutures/MicrosoftMvcJQueryValidation.js
。较旧的Beta版本在RC中与jquery.validation无法正常工作。需要的javascript文件是:
<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript" />
<script src="/Scripts/jquery.validate.min-vsdoc.js" type="text/javascript" />
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" />
正确版本的MicrosoftMvcJQueryValidation.js包含此 $(文档).ready()函数:
// need to wait for the document to signal that it is ready
$(document).ready(function() {
var allFormOptions = window.mvcClientValidationMetadata;
if (allFormOptions) {
while (allFormOptions.length > 0) {
var thisFormOptions = allFormOptions.pop();
__MVC_EnableClientValidation(thisFormOptions);
}
}
});
在文件末尾(在RC版本中)。
答案 1 :(得分:7)
好的,我想出来了......这是我的错。虽然,其中一些帖子也包含了我确实需要的一些信息。
令我惊讶的主要问题是没有人注意到,我的HTML包含脚本...查看我的帖子,看看你是否能看到问题。
我使用的是<link href=...
代码,而不是正确的<script src=...
代码。完全是我的错,因为我已经快速剪切并粘贴了CSS链接而没有考虑,只是更改了类型和文件。咄!!!
无论如何,所需的正确链接是:
<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>
一切都有效。你肯定需要包含期货项目中的'MicrosoftMvcJQueryValidation.js'文件,所以我对所提到的所有帖子都进行了投票。
虽然不包含该文件但开箱即用。如果您不担心使用JQuery,那么您可以使用以下包含来使用Microsoft实现,它将与RC一起开箱即用:
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
我希望我至少可以挽救一个人一些悲伤...我仍然无法相信我怎么可能搞砸了包括而没有注意到它太久了。
再次感谢您的帮助。
答案 2 :(得分:3)
您必须包含 MicrosoftMvcJQueryValidation.js 文件:
<link href="MicrosoftMvcJQueryValidation.js" type="text/javascript" />
请检查:Where is the right version of MicrosoftMvcJQueryValidation.js for MVC 2 beta 2?
接下来只需将Html.EnableClientValidation();
放在View页面的某个位置即可。
必须在您希望客户端验证的第一个表单之前。我更喜欢 Site.Master 页面。
使用ASP.NET MVC 2 RC。
答案 3 :(得分:2)
您确定包含了正确的JS文件吗?因为在Phill Haack's post中,MicrosoftMvcJQueryValidation.js
附加MicrosoftMvcValidation.js
而不是ClientValidationFunction
。
他还在视图中设置<% ViewContext.FormContext.ClientValidationFunction
= "EnableClientValidation"; %>
属性:
{{1}}
虽然那不是RC,但是Beta。
答案 4 :(得分:2)
ASP.NET MVC 2 Release Candidate中的默认(并且仅受Microsoft支持)验证系统不使用jQuery Validate。相反,它使用完全存在于MicrosoftMvcValidation.js中的新验证系统(尽管您还需要包含MicrosoftAjax.js)。
如果要使用jQuery Validate库,它将作为ASP.NET MVC Futures项目(可用here)的一部分包含在内,这是一个单独的下载,并且有自己的适配器脚本文件。< / p>
此外,关于Html.ValidationSummary()
帮助程序,我认为如果您希望它具有新的客户端功能,则需要将其包含在表单中。如果它在表单之外,它仍然可以工作,但它只能在服务器端工作。