0

私は、別のクラスのコレクションオブジェクトを持つ基本クラスを持つ実装に取り​​組んできました。IT は、このリンクにある実装と非常によく似ています。サイトの実装と私の実装には小さな違いが 1 つあります。入力要素がたくさんあるので、行ごとに作成するのは現実的ではありません。そこで、div からコンテンツをロードする jQuery タブを実装しました。div は、Html.RenderPartial を使用してカスタム コントロールを呼び出します。すべてが完了し、このステップまでは正常に動作します。jQuery を使用して、次のコードを使用して name プロパティを変更しようとしています。

            $('#' + id + ' input[id^="Applicant_"]').each(function() {
            var nameChange = this.id;
            var objectName = this.id.replace('Applicant_', '');
            nameChange = nameChange.replace('Applicant_', 'Application.Applicants');
            nameChange = nameChange.replace(objectName, '');
            nameChange = nameChange + '[' + tabCounter + '].' + objectName;
            $(this).attr("name", nameChange);
            //this.id = nameChange;
            //this.name = nameChange;
        });

HTML が IE8 でレンダリングされると、要素名が変更されていないことがわかりますが、submitName という新しい属性があり、これが送信されると想定しています。何らかの理由で記事と同じように、複数の要素を取得できません。何が欠けているのかわかりません。

詳細はこちら

ASP.NET MVC2 で Visual Studio 2008 を使用しています。ベースモデルは

public class Application {

        private IList<Applicant> applicants = new List<Applicant>();

        public virtual IList<Applicant> ApplicantsList
        {
            get { return applicants; }
            set { applicants = value; }
        }

}

public class Applicant {

        [DisplayName("Last Name")]
        public virtual string LName { get; set; }
        [DisplayName("First Name")]
        public virtual string FName { get; set; }
}

メインの aspx には次のコードが含まれています。

<% Html.RenderPartial("~/Views/Shared/UserControls/Application/Edit/ContactInformation.ascx"); %>

名前を変更するコードは既に上で与えられています。送信名は、本来あるべき方法で正しく生成されています。しかし、何らかの理由でコントローラーアクションに送信すると、申請者の下の要素の数は常に 0 になります。3 つの要素を手動でハードコーディングしてみましたが、同じ結果が得られました。

記事をダウンロードしてテストしたところ、記事に記載されているとおりに機能しています。私が何か違うことをしているのかどうかはわかりません。

どんな助けでも大歓迎です。

アップデート:

私の人生をテストしやすくするために、次の html を cretae aspx ページにハードコーディングしました。

<input type="text" name="ApplicationID" value="1" />                
<input type="text" name="Application.ApplicantsList[0].LName" value="LName-0" />
<input type="text" name="Application.ApplicantsList[1].LName" value="LName-1" />
<input type="text" name="Application.ApplicantsList[2].LName" value="LName-2" /> 

コードは、送信時に model.ApplicationID が 1 で、Application.ApplicantsList のカウントが 3 である必要があります。アプリケーション ID は正しく送信されていますが、コレクションは送信されていません。

4

1 に答える 1

0

問題は解決されました。ただし、違いが何であるかは正確にはわかりません。これは、aspx の Application.ApplicantList[0].Name 内の要素をどのように参照したかです。APSX では、モデルはベース モデルを参照するため、行を Model.ApplicantList[0] に変更すると、機能し始めました。モデルとアプリケーションに違いはありますか。モデルを配置すると、ページ用に作成されたオブジェクトが送信され、アプリケーションを配置すると、送信時に新しいオブジェクトが作成されると想定しています。それは正しい仮定でしょうか?

于 2013-06-04T15:03:20.723 に答える