0

クライアントで MVC3 検証を使用して検証されている入力、タイプ テキスト、要素があり、ポストが発生したときに入力値がサーバーに送信されないようにしたいと考えています。

1 対 1 の関係を共有する「ファイル」エンティティと「会社」エンティティの 2 つのエンティティがあります。ファイル エンティティには、CompanyId 外部キーがあります。

これが、name および id 属性を見ると、File.Company.Code または File_Company_Code として表示される理由です。

入力値をサーバーに送り返さないようにしたい理由は、リクエストがサーバーに到達したときに、値を「ファイル」タイプのエンティティにバインドしたいだけだからです。「File.Company.Code」の値も受け取っているため、値をファイルの会社オブジェクトにバインドしようとしていますが、これは避けたいことです。

The input element is :

    <input name="File.Company.Code" id="File_Company_Code" type="text" data-val-required="Se requiere un c&#243;digo de cliente." data-val="true" value=""/>

    And the span element:
    <span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for=" File.Company.Code "/>

私は試しました:
-jquery を使用して属性の入力名とスパン data-valmsg を変更します。しかし、これを行った後、バリデーターを再バインドする必要があるかもしれません??

何か提案はありますか?(私に知らせなければ、私は自分自身を明確に説明したいと思っています。)
ありがとう

更新 1 **
AFinkelstein sugestion のおかげで正しい軌道に乗ることができ、次のようなドメイン モデルを更新しました。

public class FileModel {

        public File File {
            get {
                return this.file;
            }
        }

        *** ADDED this which helped me solve the problem ***
        public Company Company {
            get {
                return this.file.Company;
            }
        }
    }

代わりに私の見解では:

 @Html.TextboxFor(model => model.File.Company.Code)  
  @Html.ValidationMessageFor(model => model.File.Company.Code)

私は今やっています:

  @Html.TextboxFor(model => model.Company.Code)  
  @Html.ValidationMessageFor(model => model.Company.Code)

このように、生成された name および Id 属性には、Company.Code および Company_Code という値があり、先行する「ファイル」はありません。サーバーで投稿を受信し、値を File オブジェクトにバインドすると、次のようになります。

 FileModel fileModel = new FileModel();
            try {

                TryUpdateModel(fileModel.File, "File");

「File.Company.Code」の値を受け取っていないため、ファイルの「Company」オブジェクトを初期化しようとしないため、他の問題が発生していました。

4

2 に答える 2

1

「File.Company.Code」の値も受け取っているため、値をファイルの会社オブジェクトにバインドしようとしていますが、これは避けたいことです。

これは、File がプロジェクト内のドメイン モデルであることを意味していると思います。ビューでビューモデルを使用することをお勧めします。

public class FileViewModel
{
    //other stuff contained within the File class

    [Required]
    public string FileCompanyCode { get; set: }
}

ビューモデルを使用して、投稿後に実際のファイルを作成または再取得できます。実際のファイル会社オブジェクトをビュー モデルのファイル会社コード プロパティに設定しないでください。このように、ファイル会社コードがバインドされているかどうかは実際には問題ではありません。

于 2012-05-09T17:41:13.863 に答える
0

クライアント側の検証が必要であるが、オブジェクトのリストであり、投稿構造が通常のバリデーターをサポートしていないため、投稿されているフィールドではないという同様の問題がありました。
それでも、私はこの質問と回答に触発され、別の入力フィールド (目立たない検証を有効にするために HTML.HiddenFor が生成したすべての HTML5 タグを含む) と、存在しないモデルの Html.Validator を追加するソリューションを見つけました。プロパティであるため、ポストバックの MVC バインダーはそれを無視します。
また、実際のプロパティに Html.ValidatorFor を追加して、他の検証タグが (理論的には) 別のタグを指しているため、ポストバックの検証がレンダリングする場所を持つようにしました。

于 2012-06-27T22:22:44.363 に答える