ASP.NET MVC 2 RC客户端验证无法正常工作

时间:2010-01-04 02:55:46

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-validation

我似乎无法在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发布。

5 个答案:

答案 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()帮助程序,我认为如果您希望它具有新的客户端功能,则需要将其包含在表单中。如果它在表单之外,它仍然可以工作,但它只能在服务器端工作。