1

テーブルの各行に@Ajax.BeginFormがあります。そのフォームを使用してPOSTリクエストを行うと、最初の行を除いてModelはnullになります。

最初のフォームのみが機能し、2番目のフォームなどが機能していません。すべてに固有のフォームIDを使用しました。

おそらく、IListとforループを使用しているため、

AND最初のフォームには[0].lstMatches[4] .match_set_nameのようなコントロール名があり、2番目、3番目、....フォームには[n] .lstMatches[4].match_set_nameのようなコントロール名があります

IListは、最初のモデル[0] .lstMatches[4].match_set_nameにのみモデルを提供できます。

これが私のビュー構造です

  @model IList<QIOnlineMVC3.Models.TravelAdsRulesMatchsGroups>
@{
ViewBag.Title = "Business Rule Travel Ads";
ViewBag.Layout = "_Layout2";
 }

 <table id="PageSortTable" class="travelads_business_rules" cellspacing="0">
<tr></tr>
 <tbody>
@for (var i = 0; i < Model.Count; i++)
    {
<tr class="minimised" id='trMinimised@(Model[i].id)'>
            <td colspan="13">
                @using (Ajax.BeginForm("_SaveGroupMatchs", null, new AjaxOptions { OnSuccess = "onSuccess", UpdateTargetId = "msgResult", LoadingElementId = "msgLoading", HttpMethod = "Post" }, new { @id = "SaveForm" + Model[i].id.ToString() }))
                {  
 <div class="detail">
  <div class="table_header">
                        <span class="col_a">Group</span> <span class="col_b">Group Scope</span> <span class="col_c">
                            Seq</span> <span class="col_d">&nbsp;</span> <span class="col_e">ID</span> <span
                                class="col_f">Match Location</span> <span class="col_g">Target Field</span>
                        <span class="col_h">Match Type</span> <span class="col_i">Set Name</span>
                    </div>
                    <!-- Loop for matches -->
                    <!-- start GROUP -->
                    <div class="group" id="Group_rule_@(Model[i].id)">

                       @Html.HiddenFor(model => @Model[i].id)
                       @Html.HiddenFor(model => @Model[i].ad_rule_name)
                       @Html.HiddenFor(model => @Model[i].ad_rule_desc)
                       @Html.HiddenFor(model => @Model[i].business)
                       @Html.HiddenFor(model => @Model[i].ad_region)
                       @Html.HiddenFor(model => @Model[i].ad_form)
                       @Html.HiddenFor(model => @Model[i].ad_company)
                       @Html.HiddenFor(model => @Model[i].ad_team)
                       @Html.HiddenFor(model => @Model[i].ad_language)
                       @Html.HiddenFor(model => @Model[i].ad_media_id)
                       @Html.HiddenFor(model => @Model[i].ad_insert_loc)
                       @Html.HiddenFor(model => @Model[i].ad_priority)
                       @Html.HiddenFor(model => @Model[i].access)
                       @Html.HiddenFor(model => @Model[i].deployment)


                        @for (var j = 0; j < Model[i].lstMatches.Count; j++)
                        {
                            <div id="rule@(Model[i].id)_divRuleGroup_@(Model[i].lstMatches[j].match_group_num)">
                             @Html.HiddenFor(model => Model[i].lstMatches[j].match_rule_id)
                             @Html.HiddenFor(model => Model[i].lstMatches[j].match_id)
                             @Html.HiddenFor(model => Model[i].lstMatches[j].match_group_num)
                             @Html.HiddenFor(model => Model[i].lstMatches[j].match_rule_type)
                             @Html.HiddenFor(model => Model[i].lstMatches[j].created)
                             @Html.HiddenFor(model => Model[i].lstMatches[j].access)
                            <header id="header_rule_Group"><span class="col_a">
                             @if (Model[i].lstMatches[j].Position == "First")
                             {
                                @(Model[i].lstMatches[j].match_group_num) 
                             } </span>
                            <span class="col_b">
                                            @if (Model[i].lstMatches[j].Position == "First")
                                            {
                                            @Html.DropDownListFor(model => Model[i].lstMatches[j].match_group_scope, new SelectList((List<QIOnlineMVC3.Helpers.clsGroupScope>)QIOnlineMVC3.Helpers.General.GetALLGroupScope(), "GroupScope", "GroupScope", Model[i].lstMatches[j].match_group_scope))
                                            }
                                            else
                                            {
                                                @Html.HiddenFor(model => Model[i].lstMatches[j].match_group_scope)
                                            }
                                          </span></header>
                            <div class="match">
                                <span class="col_c">@(Model[i].lstMatches[j].match_group_seq) @Html.HiddenFor(model => Model[i].lstMatches[j].match_group_seq) </span> 
                                <span class="col_d">
                                <a href="@(Url.Action("DeleteMatch", new { id = Model[i].lstMatches[j].match_id }))">
                                    <img alt="Delete" src="../../Content/Images/delete-icon.png" width="17" height="17" border="0" title="delete" /></a> 

                                        </span><span class="col_e">@(Model[i].lstMatches[j].match_id)
                                        </span><span class="col_f">
                                            @Html.DropDownListFor(model => Model[i].lstMatches[j].match_loc, new SelectList((List<QIOnlineMVC3.Helpers.clsMatchLocations>)QIOnlineMVC3.Helpers.General.GetALLMatchLocations(), "MatchLocations", "MatchLocations", Model[i].lstMatches[j].match_loc))
                                        </span><span class="col_g">
                                            @Html.DropDownListFor(model => Model[i].lstMatches[j].match_target_field, new SelectList((List<QIOnlineMVC3.Helpers.clsTargetField>)QIOnlineMVC3.Helpers.General.GetALTargetField(), "TargetField", "TargetField", Model[i].lstMatches[j].match_target_field))
                                        </span><span class="col_h">
                                            @Html.DropDownListFor(model => Model[i].lstMatches[j].match_type, new SelectList((List<QIOnlineMVC3.Helpers.clsMatchType>)QIOnlineMVC3.Helpers.General.GetALLMatchType(), "MatchTypeID", "MatchType", Model[i].lstMatches[j].match_type))
                                        </span><span class="col_i">
                                            @Html.TextBoxFor(model => Model[i].lstMatches[j].match_set_name, new { @value = Model[i].lstMatches[j].match_set_name, @class = "clsauto" })
                                            </span></div>
                            </div>


                                       if (Model[i].lstMatches[j].Last == "Last")
                                       {
                            <div id="Group_rule_@(Model[i].id)_@(Model[i].lstMatches[j].match_group_num)"></div>
                            <!-- end MATCH -->
                            <div class="new">
                                @Ajax.ImageWithTextActionLink("<img src=\"../../Content/Images/new-icon.png\" width=\"17\" height=\"17\" border=\"0\" alt=\"New Match\" />New Match", "NewMatch", new { ruleid = Model[i].id, groupid = Model[i].lstMatches[j].match_group_num }, new AjaxOptions { UpdateTargetId = "Group_rule_" + Model[i].id.ToString() + "_" + Model[i].lstMatches[j].match_group_num, InsertionMode = InsertionMode.InsertBefore, HttpMethod = "Get", LoadingElementId = "msgLoading" })
                            </div>
                                       }

                        }

                    </div>
                    <!-- end MATCH GROUP -->
                    <!-- END Loop of Matches -->
                    <div class="new new_group">
                        @Ajax.ImageWithTextActionLink("<img src=\"../../Content/Images/new-icon.png\" width=\"17\" height=\"17\" border=\"0\" alt=\"New Group\" />New Group</a>", "NewGroup", new { ruleid = Model[i].id }, new AjaxOptions { UpdateTargetId = "Group_rule_" + Model[i].id.ToString(), InsertionMode = InsertionMode.InsertAfter, HttpMethod = "Get", LoadingElementId = "msgLoading" })
                        <div class="delete_group">
                            Delete Group ID:
                            <input type="text" id='txtdeleteGroupNo_@(Model[i].id)' />
                            <input type="submit" id='btnDeleteGroup_@(Model[i].id)' value="Delete Group" class="btn btn_delete" style="float: none;" onclick="return DeleteGroup(this);" />
                        </div>
                    </div>
                    <div id="divNewGroup">
                    </div>
                    <div class="btn_row">
                        <input type="reset" name="reset" class="btn" value="Cancel" onclick='DoExpandCollapsh("trMinimised@( Model[i].id)","main_collapsed@( Model[i].id)","main_expanded@( Model[i].id)")'/>
                        <input type="submit" name="btnSave" class="btn" value="Save" />
                        <a href="@(Url.Action("DeleteTravelAdsRule", new { id = Model[i].id }))" class="btn btn_delete">
                            Delete Rule</a>
                    </div>
                </div>
                }

            </td>
        </tr>

    }
</tbody>

これが私のコントローラーです

    [Authorize]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult _SaveGroupMatchs(IList<TravelAdsRulesMatchsGroups> mm)
    {
        try
        {
            if (mm != null & mm.Count > 0)
            {

                foreach (var item in mm)
                {
                    List<MatchModel> LMM = item.lstMatches.ToList();
                    List<MatchModel> LMMUpdate = LMM.Where(t => t.match_id != 0).ToList();
                    //update 
                    foreach (var mmupdate in LMMUpdate)
                    {
                        UpdateMatch(mmupdate);
                    }
                    List<MatchModel> LMMSave = LMM.Where(t => t.match_id == 0).ToList();
                    //save
                    foreach (var itemSave in LMMSave)
                    {
                        itemSave.access = item.access;
                        itemSave.deployment = item.deployment;
                        itemSave.match_deployment = item.deployment;
                        CreateMatch(itemSave);
                    }
                }
            }
        }
        catch { Content("Problem due to Error"); }

        return Content("Record Saved Successfully!");
    }

2番目以降の行でIListを取得していません...

どうすればそれを手に入れることができますか、何かアイデアはありますか?

4

1 に答える 1

0

うーん、あなたが何をしたいのかよくわかりません。

  • アクション メソッド TravelAdsRulesMatchsGroups
    を呼び出す 1 つのフォームのみを使用するの全体のリストを保存したい場合_SaveGroupMatchs

  • 1 つだけTravelAdsRulesMatchsGroups(レコードごとに 1 つの送信ボタン)を保存する場合は、行ごとに
    1 つを使用し続けform、コントローラーのアクションを次のように変更します。

    public ActionResult _SaveGroupMatchs(TravelAdsRulesMatchsGroups mm)
    

    次に、アクションメソッドを適応させて、インスタンスの記録を処理しますTravelAdsRulesMatchsGroups

    そして、あなたのビューでは、使用しないでください

    @Html.HiddenFor(model => model[i].Id)
    

    この構文を使用すると、レンダリングされる Html は<input ... name="[i].Id" />
    (例: <input ... name="[2].Id" />)

    モデル バインダーは を使用してname、モデルのプロパティを入力します。

    代わりに、

    @* for your TravelAdsRulesMatchsGroups properties *@
    @Html.Hidden("id", Model[i].id)
    @* ... and so on ...*@
    
    
    @* for the lstMatches property, which is a list of MatchModel *@
    @for (var j = 0; j < Model[i].lstMatches.Count; j++)
    {
        @Html.Hidden("lstMatches[" + j.ToString() + "].match_rule_id", Model[i].lstMatches[j].match_rule_id)
        @* ... and so on ...*@
    }
    

注 : ネストされた Html フォームは使用できないので注意してください。

于 2012-08-03T10:06:43.283 に答える