5

我似乎无法在 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(不是 beta)的 Visual Studio 2008,我正在寻找任何可下载或发布的使用 RC 版本的客户端验证示例。

4

5 回答 5

7

从 MVC 2 Beta 更新项目时,请使用:/src/MvcFutures/MicrosoftMvcJQueryValidation.js来自 MVC 2 RC 源代码包(链接)。较旧的 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 的正确版本包含此$(document).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 版本中)。

于 2010-01-04T18:44:18.413 回答
7

好的,我想通了……这 100% 是我的错。虽然,其中一些帖子包含了一些我也确实需要的信息。

我很惊讶没有人注意到的主要问题是我的 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>    

我希望我能至少拯救一个人一些悲伤......我仍然无法相信我怎么会搞砸包含并且太久没有注意到它。

再次感谢你的帮助。

于 2010-01-07T18:44:32.147 回答
3

您必须包含MicrosoftMvcJQueryValidation.js文件:

<link href="MicrosoftMvcJQueryValidation.js" type="text/javascript" />

检查这个:MVC 2 beta 2 的 MicrosoftMvcJQueryValidation.js 的正确版本在哪里?

接下来只需将Html.EnableClientValidation();其放在“查看”页面中的某个位置。它必须在您要进行客户端验证的第一个表单之前。我更喜欢Site.Master页面。

使用 ASP.NET MVC 2 RC。

于 2010-01-04T10:20:21.077 回答
2

你确定你包含了正确的 JS 文件吗?因为在Phill Haack 的帖子中,它MicrosoftMvcJQueryValidation.js附加了而不是MicrosoftMvcValidation.js.

他还在ClientValidationFunction视图中设置了属性:

<% ViewContext.FormContext.ClientValidationFunction 
= "EnableClientValidation"; %>

虽然那不是RC,而是Beta。

于 2010-01-04T06:44:45.657 回答
2

ASP.NET MVC 2 Release Candidate 中的默认(并且仅受 Microsoft 支持)验证系统不使用 jQuery Validate。相反,它使用完全存在于 MicrosoftMvcValidation.js 中的新验证系统(尽管您还需要包含 MicrosoftAjax.js)。

如果您想使用 jQuery Validate 库,它包含在 ASP.NET MVC Futures 项目(可在此处获得)中,这是一个单独的下载,并且有自己的适配器脚本文件。

此外,关于Html.ValidationSummary()助手,如果您希望它具有新的客户端功能,我认为它需要包含在表单中。如果它在表单之外,它仍然可以工作,但它只能在服务器端工作。

于 2010-01-04T07:21:37.470 回答