1

このようなページを機能させる方法に頭を悩ませようとして立ち往生しています。私のモデルには、さまざまな言語のテキスト フィールドを持つオブジェクトのリストが含まれています。ビューには、ドロップダウン リストで選択した言語に関連付けられたテキスト フィールドを表示するために動的に変更する必要がある場所があります。親フォームが送信されたときに、部分ビュー/モデルで編集された後、テキスト フィールドが親モデルに正しく保存されるように、テキスト フィールドも編集可能である必要があります。別のページで、部分ビューは私がやるべきことであるとほのめかされました。おそらく、リスト内の各言語の部分ビューをプログラムで生成し、ドロップダウンでの選択に基づいて正しい部分ビューを更新/レンダリングするために何かをすることについてですリスト...?

私の最初の試みでは、コントローラーへのajax呼び出しを使用して、ドロップダウンメニューの値に基づいて正しい部分ビューを返すようにしましたが、モデルにバインドできないため、更新/保存できませんメイン ビュー フォームが送信されます。これまで私が取り組んできたものは次のとおりです。

モデル:

    public class EditModel
    {
        public List<TextField> TextFieldList;
        public List<string> DisplayList
            {
                get
                {
                    List<string> tempList = new List<string>();
                    foreach (TextField a in TextFieldList)
                    {
                        tempList.Add(a.Language.ToString() + "/" + a.Currency.ToString());
                    }
                    return tempList;
                }
            }
    }

コントローラ:

    public ActionResult EditTextFields(int adId, int index)
    {
        Ad ad = this.Repository.GetById(adId);
        return PartialView("EditTextFields", ad.TextFieldsList[index]);
    }

メイン ビュー:

    @model Models.EditModel
    <script type="text/javascript">

    $(function () {
        $(href('DisplayList').change(function () {
            var value = $(this).find(':selected').val();
            var adId = GetId();
            $.get('/Controllers/EditTextFields', "{\"adId\": " + String(adId) + ", \"index\":\"" + value + "\"}", function (data) {
                $('#TextFieldDiv').html(data);
            });
        }));
    });

    </script>

    @using (Html.BeginForm("Edit", "Widget", FormMethod.Post, new { id = "WidgetEditForm", enctype = "multipart/form-data" }))
    {
        <div>
            @Html.DisplayFor(m => m.DisplayList)
        </div>
        <div id="TextFieldDiv">
            @{Html.RenderPartial("EditTextFields", (TextField)@Model.TextFieldList[0]);}
        </div>
    }

部分図:

    @model Objects.TextField
    @using (Html.BeginForm())
    {
    <table>
    <tr>
        <td class="fieldName" style="vertical-align: top;">
            Headline Text:
        </td>
        <td>
            @Html.EditorFor(m => m.Headline)
            @Html.ValidationMessageFor(m => m.Headline)
        </td>
    </tr>
    <tr>
        <td class="fieldName">
            Sub-Headline Text:
        </td>
        <td>
            @Html.EditorFor(m => m.SubHeadline)
            @Html.ValidationMessageFor(m => m.SubHeadline)
        </td>
    </tr>
    </table>
    }

私を良い方向に向けるアイデアはありますか?

4

0 に答える 0