【问题标题】:Many to many partial view relationship in a view一个视图中的多对多局部视图关系
【发布时间】:2023-03-18 16:21:01
【问题描述】:

我有一个添加父局部视图的按钮,父局部视图也有一个添加按钮,可以在其中添加子局部视图。我的问题是,当我按下主按钮添加 2 个父局部视图并按下添加子局部按钮时在第二个父局部视图中,然后在第一个父局部视图中创建子局部视图。我想根据父局部视图添加子局部视图。我该怎么做?

编码

//父部分

<div id="individual-details" class="card">
    <div class="card-header">
        @(Model.SearchFirstName + Model.SearchLastName == "" ? "New Search Individual" : Model.SearchFirstName + Model.SearchLastName)
        @if (ViewData["hideRemove"] == null || (bool?)ViewData["hideRemove"] == false)
        {
            <a id="individual-remove" href="#" onclick="removeIndividual(this)" class="btn btn-danger pull-right">Remove</a>
        }
    </div>
    <div class="form-horizontal">
        <div class="card-block">
            <div class="form-group">
                @Html.LabelFor(m => m.SearchPostcode, "Search Post Code", new { @class = "form-control-label" })
                @Html.TextBoxFor(m => m.SearchPostcode, null, new { @class = "form-control" })
            </div>

        </div>
    </div>
    <div class="card-block">
        <div id="Characteristics" class="mb-3">
            @if (Model?.Characteristics != null)
            {
                for (var i = 0; i < Model?.Characteristics.Count; i++)
                {
            <div class="form-group">
                @{ Html.RenderPartial("IndividualSearchCharacterisiticPartial", Model.Characteristics[i], new ViewDataDictionary()); }
              @*  @Html.EditorFor(m => m.Characteristics);*@
            </div>
                }
            }
        </div>
        <button id="add-characteristics" onclick="add(this)" type="button" class="btn btn-success">Add Characteristics</button>
    </div>
</div>

//Button 
function add(element){
               var action = ' @Url.Action("NewIndividualSearchCharacteristic", "Blended")';
               $.post(action)
              .done(function (partialView) {
                  $('#Characteristics').append(partialView);
              });
        }

//child partial


@model ABC.Core.Models.DTOs.Characteristic

@using (Html.BeginCollectionItem("Characteristics"))
{
    <div id="characteristic-details" class="card">
        <div class="form-horizontal">
            <div class="card-block">
                <div class="container">
                    <div class="row">
                        <div class="col-*-*">
                            @Html.LabelFor(m => m.Name, "Name", new { @class = "form-control-label" })
                        </div>
                        <div class="col">
                            @Html.TextBoxFor(m => m.Name, null, new { @class = "form-control" })
                        </div>
                        <div class="col-*-*">
                            @Html.LabelFor(m => m.Value, "Value", new { @class = "form-control-label" })
                        </div>
                        <div class="col">
                            @Html.TextBoxFor(m => m.Value, null, new { @class = "form-control" })
                        </div>
                        <div class="col-*-*">
                            <a id="characteristic-remove" href="#" onclick="removeCharacteristic(this)" class="btn btn-danger pull-right">Remove</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
}

【问题讨论】:

  • 获取单击添加按钮的父局部视图的唯一 ID,并将子视图添加到该特定局部视图。
  • 就像@PriyankPanchal 所说的那样。确保您的 div 的 ID 是唯一的,并且添加父部分时的按钮正在传递新的未使用的父 div ID
  • 能否贴出相关代码重现问题?您也可以在子部分按钮单击事件中设置断点,根据您的描述,您似乎没有找到正确的父部分视图来添加元素。
  • 我添加了代码,请检查。

标签: c# asp.net-core partial-views


【解决方案1】:
  $('#Characteristics').append(partialView);

问题与这部分代码有关,如果添加了多个父partial View,就会有多个Characteristics容器,那么,如果使用上面的代码添加子partial view,新的item会添加到第一个局部视图。

为了解决这个问题,可以根据触发按钮找到相邻的Characteristics容器,如:根据触发按钮找到父元素,然后使用find()方法找到Characteristics容器:

  $(element).parent().find("#Characteristics").append(partialView);

这是一个示例,您可以参考:

主页面中的代码(使用按钮添加多个父部分视图(AddPost_PV)):

<button id="add_Post" onclick="AddPost(this);"  type="button" class="btn btn-success">Add Post</button>

<div id="parent_pv_container">

</div>

父视图页面中的代码:

@model dotNetCore3_1.Models.Post

<div class="row">
    <div class="col-md-4">
        <form asp-action="AddPost_PV">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Title" class="control-label"></label>
                <input asp-for="Title" class="form-control" />
                <span asp-validation-for="Title" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Content" class="control-label"></label>
                <input asp-for="Content" class="form-control" />
                <span asp-validation-for="Content" class="text-danger"></span>
            </div>
            <div class="form-group">
                <button id="add_blog" onclick="AddBlog(this);" type="button" class="btn btn-success">Add Blogs</button><br />
                <div id="child_pv_container">

                </div>
            </div> 
        </form>
    </div>
</div>

JavaScript 代码:

    var index = 0;
    // add parent partial view
    function AddPost(element) {
        var action = '@Url.Action("AddPost_PV", "Blog")';
        $.post(action)
            .done(function (partialView) {
                index++;
                $("#parent_pv_container").append("<h4>Parent Partial View " + index + "</h4><hr />");
                $('#parent_pv_container').append(partialView);
            });
    }

    var childindex = 0;
    //add children partial view.
    function AddBlog(element) {
        var action = '@Url.Action("AddBlog_PV", "Blog")';
        $.post(action)
            .done(function (partialView) {
                childindex++;
                 
                $(element).parent().find("#child_pv_container").append("<h4>Child Partial View " + childindex + "</h4><hr />");
                $(element).parent().find("#child_pv_container").append(partialView);
            });
    }

截图如下:

【讨论】:

  • 谢谢,我解决了,但新问题是 - stackoverflow.com/questions/64224356/…
  • @UC57,看来Yongqing Yu已经给出了正确的解决方案,请查收。如果回复是正确的解决方案,我建议您在可以标记时尝试将其标记为已接受的答案。它可以在未来帮助其他社区成员解决类似的问题。感谢您的理解。
猜你喜欢
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
相关资源
最近更新 更多