【问题标题】:Asp.Net MVC 5 WCF validation; <required> <display>Asp.Net MVC 5 WCF 验证; <必需> <显示>
【发布时间】:2014-12-31 21:22:59
【问题描述】:

我的 WCF 服务中有一个类似于以下内容的元数据文件:

Imports System.ComponentModel.DataAnnotations
Imports Microsoft.AspNet.Identity.EntityFramework
Imports System.Globalization
Imports Microsoft.AspNet.Identity
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.Mvc

<MetadataType(GetType(gpsData.Metadata))>
Partial Public Class gpsData
    Friend NotInheritable Class Metadata

        <Required>
        <Display(Name:="Project Name:")>
        Public Property ProjName As String

        .
        .
        .

End Class

问题是Required 和Display 标签没有被传递给MVC 应用程序,所以字段的验证不起作用,并且显示的名称是数据库中分配的表名。例如,不是显示“项目名称”,而是显示“项目名称”。

编辑:

添加了来自 MVC 应用程序的 .vbhtml 文件代码。我第一次提出问题时应该添加此代码。

@ModelType IUD_FCL_Service.gpsData
@Code
    ViewBag.Title = "Survey Input Form"
End Code
<h2>Survey Input Form</h2>
<hr>
@Using (Html.BeginForm("SurveyForm", "GPS", FormMethod.Post, New With {.enctype = "multipart/form-data"}))
    @Html.ValidationSummary()  @* creates a list of validation messages instead of displaying the messages next to each field *@
    @Html.AntiForgeryToken()

    Dim fileNameData As String = "Null"

    TempData("fileNameData") = fileNameData

    @<table class = "col-lg-8">
    <tr>
        <td>
            <div class="editor-label">
                @Html.LabelFor(Function(Model) Model.ProjName)
            </div>
            <div id="projectName" class="editor-field">
                @Html.TextBoxFor(Function(Model) Model.ProjName, New With {.class = "form-control"})
                @*@Html.ValidationMessageFor(Function(Model) model.ProjName) <---  The Html.ValidationSummary() method at the top now handles these messages.*@
            </div>
        </td>
.
.
.

【问题讨论】:

  • 您确定分部类与目标类位于同一命名空间中吗?
  • @Bjørn-RogerKringsjå,是的
  • 那么我真的不知道为什么这不起作用,因为我就是这样做的。哦,好吧,除了 NotInheritable 约束,但我无法想象删除它会有什么不同。
  • 嗯,值得一试。我将尝试删除约束并查看。
  • 不,它没有用,但值得一试。我一定还缺少其他东西。

标签: .net vb.net wcf


【解决方案1】:

这需要一段时间才能解决,但我在最初的问题中遇到的问题是因为我将 WCF 服务创建为一个网站。

在 VS 2013 中有多种创建服务的方法,我创建我的方法是启动一个 VS 实例并选择;

文件 > 新建 > 网站,然后选择 WCF 服务 模板

这样做很好,但是您不能传递在服务中创建的元数据。

如果您以这种方式创建服务并且在验证或传递元数据时遇到问题,请继续阅读。

为了解决这个问题,改为,在 VS 中创建一个新项目;

新建项目 > 已安装 > 模板 > Visual C# / Visual Basic (取决于您希望使用的语言)> WCF,然后选择 WCF 服务应用程序 模板。

将您的所有代码从网站服务转移到这个新服务,并将服务引用添加到您的应用程序,但除了添加服务引用之外,您还需要添加对服务的 .dll 文件的引用;

在解决方案资源管理器中,右键单击 References,然后选择 Add 参考...,然后选择底部的浏览...按钮 窗口并浏览到您的服务所在的目录。

例如,如果您的服务名为 TestService,则选择;

C:\...服务的路径...\TestService\TestService\bin\TestService.dll

添加 .dll 后,您应该能够通过函数调用访问服务中的所有元数据,并且您的验证也应该按预期工作。

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2011-01-08
    • 2011-05-30
    相关资源
    最近更新 更多