2

ビューモデルを使用したビューがあります。@using (Html.BeginForm())このビューでは、以下に示すように、ブロック コード内で部分ビューを使用しています。

 @foreach (var party in Model.Participants)
                {
                    Html.RenderPartial("BlankEditorRow", party);
                }

部分ビューにはいくつかのテキスト ボックス フィールドがあり、ユーザーはこれらのフィールドにデータを入力できます。送信ボタンが部分ビュー内に配置されず、メイン ビューに配置されるようになりました。

私のビューでは、送信ボタンをクリックすると、ビューモデルに null 値が表示されます

[HttpPost]
    public ActionResult ActionName(ViewModel model)
    {

    }

部分ビューから投稿データを取得する方法がわかりません。部分的なビューからデータを投稿する方法を理解できる人はいますか? 例は大きな助けになるでしょう

編集:以下の部分図:

@model ASPNETMVCApplication.Models.Administration.Account.PartyModel

@using HtmlHelpers.BeginCollectionItem

<tr class="editorRow">        
    @using (Html.BeginCollectionItem("party"))
    {

        <td>@Html.TextBoxFor(m => m.FirstName, new { @style = "width: 100px;" })
        </td>
        <td>@Html.TextBoxFor(m => m.LastName, new { @style = "width: 100px;" })
        </td>
        <td>
            @Html.DropDownListFor(model => model.PartyPersonalDetail.Gender, new SelectList(Model.Gender, "Id", "Name"), new { @style = "width: 100px;" })
        </td>
        <td>@Html.TextBoxFor(m => m.PartyPersonalDetail.MobilePhone, new { @style = "width: 100px;" })
        </td>
        <td>
            @Html.DropDownListFor(model => model.PartyPersonalDetail.GothraId, new SelectList(Model.Gothras, "Id", "GothraName"), "--Don't Know--", new { @style = "width: 122px;" })
        </td>
        <td>
            @Html.DropDownListFor(model => model.PartyPersonalDetail.NakshtraId, new SelectList(Model.Nakshtras, "Id", "NakshtraName"), "--Don't Know--", new { @style = "width: 122px;" })
        </td>
        <td>@Html.TextBoxFor(m => m.PartyPersonalDetail.EMail1, new { @style = "width: 135px;" })
        </td>
        <td>
            <a href="#" class="deleteRow">Delete</a>
        </td>

    }
</tr>
4

2 に答える 2

0

エディター テンプレートを使用 します。

あなたのViewmodelがこのようなものであるとしましょう

public EventViewModel
{
  public int ID { set;get;}
  public string EventName { set;get;}
  public List<Participant> Participants {set;get;}
  public EventViewModel()
  {
    Participants=new List<Participant>();
  }
}

public class Participant
{
  public string FirstName { set;get;}
  public string LastName { set;get;}
}

~/Views/ yourControllerNameFolder / の下に「 EditorTemplates 」という名前のフォルダーを作成し、という名前のビュー (エディター テンプレート) を作成します。Participant.cshtml

エディター テンプレートのコードを追加します。

@model Participant
<p>
  @Html.TextBoxFor(x=>x.FirstName)
</p>
<p>
  @Html.TextBoxFor(x=>x.LastName)
</p>

メイン ビューで、Html.EditorForHTML ヘルパー メソッドを使用して、このエディター テンプレートを呼び出します。

@model EventViewModel

@using (Html.BeginForm())
{
    <p>Event Name</p>
    @Html.TextBoxFor(x => x.EventName) 
    @Html.EditorFor(x=>x.Participants)
    <input type="submit" value="Save" />
}

フォームを投稿すると、ビューモデルの参加者コレクションで参加者情報が取得されます。

于 2013-01-23T14:06:48.120 に答える
0

MVC でコレクションを投稿するには、インデックスを作成する必要があるため、その代わりにループforeachが必要です。for

これを試して:

@for(int i = 0; i < Model.Participants.Count; i++)
{
    Html.RenderPartial("BlankEditorRow", Model.Participants[i]);
}
于 2013-01-23T13:38:09.127 に答える