动态更改部分视图的数据,同时保持绑定到父视图/模型的代码

时间:2012-07-26 21:38:49

标签: c# asp.net-mvc asp.net-mvc-3 razor asp.net-mvc-partialview

我一直试图围绕如何制作像这样的作品的页面。我的模型包含一个对象列表,其中包含不同语言的文本字段。视图中有一个点需要动态更改,以显示与下拉列表中所选语言关联的文本字段。文本字段也需要是可编辑的,以便在提交父表单时,在部分视图/模型中编辑后,文本字段需要在父模型中正确保存。我在另一页中暗示部分视图是我应该尝试做的事情,可能是以编程方式为列表中的每种语言生成部分视图,并根据下拉列表中的选择更新/呈现正确的部分视图列表...?

我最初的尝试让我尝试使用对控制器的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>
    }

想法指出我的方向好吗?

0 个答案:

没有答案