0

意見:

@model My.Data.Section

@using (Html.BeginForm("Save", "Sections"))
{
    @Html.Partial("_Fields", Model.Fields);

    <input type="submit" value="Save">
}

JS を表示:

@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript">
    $(function () {
        $('form').submit(function () {
            if ($(this).valid()) {
                $.ajax({
                    url: this.action,
                    type: this.method,
                    data: $(this).serialize(),
                    success: function (result) {
                        // do some stuff with the returned partial
                    }
                });
            }
            return false;
        });
    });
</script>

モデル:

データ層 (EF5/DBContext/unitofwork) から取得

namespace My.Data
{
    using System;
    using System.Collections.Generic;

    public partial class Section
    {
        public Section()
        {
            this.Fields = new HashSet<Field>();
        }

        public int SectionID { get; set; }
        public int FormID { get; set; }
        public string Name { get; set; }
        public Nullable<int> PrevSection { get; set; }
        public Nullable<int> NextSection { get; set; }
        public int SortOrder { get; set; }

        public virtual ICollection<Field> Fields { get; set; }
        public virtual Form Form { get; set; }
    }
}

コントローラ:

[HttpPost]
public ActionResult Save(Section model, FormCollection fc)
{
    // do some fun stuff
    return PartialView("_Section", model);
}

コントローラーをデバッグすると、モデル オブジェクトが逆シリアル化されません。これは、 labelfor & textboxfor ect を使用していないためだと思います

FormCollection オブジェクトを調べると、必要なすべてのキーとすべての値が含まれていますが、フィールドから data-fieldid-itemid="1" などの他の値を取得したいのですが、どうすればこれを達成できますか? ? これを行う最善の方法は何ですか?

LabelFor/TextboxFor を使用する必要がありますか?

私が期待していたのは、データが入力されたモデル オブジェクトと、モデル オブジェクトのサブ項目、特に public virtual ICollection Fields { get; 設定; } も記入します。

ここでいくつかのコンセプトが欠けているような気がします。何かアイデアはありますか?

ありがとう!

4

1 に答える 1

1

まず、フォームに部分ビューを使用しないでください。代わりに、EditorTemplates を使用する必要があります。

第 2 に、属性はブラウザーによってサーバーに送信されないため、属性を取得できません。MVC は、ブラウザーがサポートするメカニズムにとらわれています。

あなたのオプションは、送信ハンドラーを使用して隠しフィールドに属性を入力するか、最初に隠しフィールドにデータを入れるか、投稿するすべてのデータを設定する ajax 投稿を行うか、単にコントローラーに「記憶させる」ことです。 " GET で設定した属性。

于 2012-12-10T22:51:16.207 に答える