亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為包含復雜對象列表的復雜對象制作編輯器表單

為包含復雜對象列表的復雜對象制作編輯器表單

C#
HUX布斯 2023-09-16 20:19:42
我正在開發一個 MVC 項目,在該項目中,我試圖在將其提交到數據庫之前檢查已由控制器處理的復雜對象列表。問題的關鍵在于兩個部分。首先,視圖顯示每個對象,并帶有“保留此”復選框(即:此對象適合添加)其次,復雜對象都來自一個源 - 但每個復雜對象列表可以有多個源。我還需要為每個源顯示一個復選框,每個源僅顯示一次,表示不同的標志(不保留,但如果源完整或僅部分)因為這是關于程序生成的地圖,所以有兩件事是:地圖圖塊列表(復雜對象的列表) - 每個圖塊都有一個復選框,如果我們保留它以添加到數據庫,或者忽略它。地圖標識符(源)- 每次運行都有一個復選框,指示我們是否知道這些是本次運行的所有圖塊,還是只有少數圖塊。到目前為止我是如何解決這個問題的:在我看來,當我不擔心區分源時,我使用了 EditorForModel。這對于讓復選框返回到帖子中非常有用<form asp-controller="Process" asp-action="Keep" method="post">    <input type="submit" value="Submit Data" id="btnSubmit" />    <hr />    @Html.EditorForModel()    <input type="submit" value="Submit Data" id="btnSubmit" />    <hr /></form>帶有原始模型的模板,即地圖的每個圖塊。這并沒有區分地圖 - 我只是將所有圖塊(無論它們來自哪個地圖)以單個列表的形式傳遞給視圖。這非常有效,我的后期操作將不同的地圖分開來單獨處理每個地圖及其圖塊。觀點基本上是:- Tile 1 CheckBox: Keep[]?- Tile 2 CheckBox: Keep[]?- Tile 3 CheckBox: Keep[]?... and so on不關心它們來自哪張地圖。地圖信息仍然存在(它位于每個圖塊對象上),我只是在“發布”操作中對其進行處理,以將它們正確地分離到地圖中。但現在,我想添加判斷給定地圖的圖塊列表是否完整的功能。我的目標是一個復選框 - 看起來像這樣:Map Identifier map1  CheckBox: Complete? [] - Tile 1 for map1    CheckBox: Keep[]? - Tile 2 for map1    CheckBox: Keep[]? - ... and so onMap Identifier map2  CheckBox: Complete? [] -Tile 1 for map2     CheckBox: Keep[]? - ... ect我不知道每次處理嘗試會有多少個圖塊或地圖。所以我試圖做的是創建一個新的 ViewModel :    public class MultipleMapIdentifiers    {        [Display(Name = "Map: ")]        public string MapIdentifier { get; set; }        public List<TileInformation> TileInformationList{ get; set; }        [Display(Name = "Full Run? ")]        public bool FullRun { get; set; }    }然后,在返回 Review 視圖之前,我只需瀏覽所有提交的圖塊,獲取不同的 MapIdentifier,然后循環遍歷圖塊以查找具有相同 mapID 的圖塊,并將它們一起放入此視圖對象中的列表中。然后我使用新的編輯器模板創建了新視圖。起初,我只是在 MultipleMapIdentifiers EditorTemplate 中使用 @foreach 循環來顯示每個圖塊。讓他們表現得很棒。調用 Post 時返回空列表。其次,我嘗試為每個項目調用部分視圖 - 仍然是 MultipleMapsIdentifiers EditorTemplate 中的 Foreach 循環,但它調用了我希望能夠正常用于編輯器復選框的 TileInformation 模板。請記住 - 如果我們想要保留此圖塊或將其作為壞/重復圖塊丟棄,則每個圖塊信息都有其自己的復選框。這也只向發布操作返回空的圖塊列表。有沒有辦法做到這一點,我所希望的?如何獲取帶有復選框的列表,將其完整返回到“發布操作”,以便我可以在添加到數據庫之前刪除我們不想保留的列表?
查看完整描述

1 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

如果有人正在搜索并降落在這里:


我最終向通用模型添加了幾個 [NotMapped] 屬性,首先包括一個 bool 屬性。如果第一個標志為 true,則它會顯示地圖標識符字符串和其他任何內容,否則它僅使用 razor 中的隱藏字段來推送其余模型版本的數據。


@if (Model.First)

{

    <div class="row mb-3 bg-info rounded">



        <div class="col-sm-2 font-weight-bold border-bottom border-light mb-2 align-items-center">

            @Html.DisplayNameFor(a => a.MapIdentifier)

        </div>

        <div class="col-sm-7 font-italic text-truncate border-bottom border-light mb-2 align-items-center">

            <div class="display-field">

                @Html.DisplayFor(a => a.MapIdentifier)

            </div>

            <div class="editor-field">

                @Html.HiddenFor(a => a.MapIdentifier)

                @Html.ValidationMessageFor(a => a.MapIdentifier)

            </div>

        </div>

        <div class="col-sm-3 border-bottom border-light mb-2">

            <p class="text-center"><span>@Html.CheckBoxFor(a => a.FullRun)</span>  <b>Was this a Complete Run?</b></p>

            <p class="text-center"><span>@Html.CheckBoxFor(a => a.MapPointsRecorded)</span>  <b>Recording Map Points?</b></p>

        </div>

        <div class="editor-field">

            @Html.HiddenFor(a => a.First)

            @Html.ValidationMessageFor(a => a.First)

        </div>

    </div>

}

else

{

    <div class="editor-field">

        @Html.HiddenFor(a => a.MapIdentifier)

        @Html.ValidationMessageFor(a => a.MapIdentifier)

    </div>

}

可能不是最優雅的解決方案,但它目前有效。


查看完整回答
反對 回復 2023-09-16
  • 1 回答
  • 0 關注
  • 153 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號