如何在没有模型的情况下验证 MVC3 中的强类型视图

Posted

技术标签:

【中文标题】如何在没有模型的情况下验证 MVC3 中的强类型视图【英文标题】:How to Validate a strong type view in MVC3 without a model 【发布时间】:2012-05-01 13:52:35 【问题描述】:

我的项目卡住了。 该项目有 3 层:

    使用 ado.net 数据模型进行数据访问。 从数据访问 ado.net 数据中检索数据的 WCF 服务 模型并发送一个序列化的类。 连接到 wcf 服务的 MVC Web 应用程序。

wcf 服务的类具有从另一层(数据访问层)检索数据并返回到 mvc 应用程序的过程(这没有问题) 我创建了一个强大的类型视图(来自 wcf 服务参考),它显示了产品类别并且非常适合购买我不知道如何验证这个视图!

我看过很多关于验证的文章,其中大部分都使用模型和数据注释,但我的情况并非如此。我发现了一些关于 jquery 验证的文章,但我已经尝试过,但没有任何反应......这是视图的代码:

@model SkySolutionsMVC3.ProductCategoryServiceReference.CompositeProductCategory
@
    ViewBag.Title = "Edit";

<h2>
    Edit</h2>
<script src="@Url.Content("~/Scripts/jquery-1.7.2.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>


@using (html.BeginForm())

    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Product Category</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Enabled)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Enabled)
            @Html.ValidationMessageFor(model => model.Enabled)
        </div>
        @Html.HiddenFor(model => model.Id)
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name, new  id="Name")
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <p>
            <input type="submit" name="btnSave" value="Save" />
        </p>
    </fieldset>

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

请帮忙!我需要一些想法...谢谢。

【问题讨论】:

没有发生任何事情的原因是因为您的模型元数据未设置为验证属性。您必须以某种方式让您的视图知道它需要如何验证。您不想使用数据注释进行验证的原因是什么? 您的问题标题令人困惑,如果没有模型,视图如何成为强类型?也请发布您的模型... 我不明白为什么这个问题会被 WCF 标记? @PetarVucetin 我个人认为 WCF 标签是正确的,因为具有 WCF + MVC3 经验的人可能会遇到同样的问题,并且可能会建议提供 首先,对不起我的英语...... Dmitry,我没有使用数据注释,因为当我创建对 wcf 服务的引用时,我可以实例化一个具有所有所需功能的对象检索或发送数据到数据库,在这种情况下,我认为不需要模型(我认为)。 // 3nigma,视图是强类型的,因为它基于一个通过 wcf 服务引用引用的类,或者至少是我在创建视图时定义的。 【参考方案1】:

我不完全确定你想要的是什么,但如果你说你本质上需要控制一个从其他地方导入的类,那么如何:编写你自己的类,从你正在使用的类继承现在作为模型并从 IValidatableObject 继承, 然后将适当的注释添加到覆盖的属性或实现 Validate 方法,如下所示:

public class MyClass : SkySolutionsMVC3.ProductCategoryServiceReference.CompositeProductCategory, IValidatableObject [Required] public override string Name get return base.Name; set base.Name = value; public IEnumerable Validate(ValidationContext validationContext) if (Name.Length != 5) yield return new ValidationResult("Name must be exaclty 5 characters long", new string[]"Name");

【讨论】:

以上是关于如何在没有模型的情况下验证 MVC3 中的强类型视图的主要内容,如果未能解决你的问题,请参考以下文章

mvc3 + jQuery 验证:如何捕获错误或正常事件

使用 mockeryBuilder() 在没有数据库的情况下测试 Yii2 中的存在验证器

如何在没有验证的情况下更新属性

如何在没有交叉验证的情况下运行网格搜索?

如何在没有协议的情况下对输入类型 url 使用 jQuery 验证?

MVC3 自定义视图库