Razorページでビューコンポーネントをバインドするモデル

ライアン・テイト

ASP.NET Core 2.1、Razor Pages、およびViewコンポーネントを使用しています(ただし、Viewコンポーネントがまだ必要な場合は販売されていません)

Organization子モデルのリストを含む親モデルがありますContacts

組織

public Guid Id { get; set; }
public string OrganizationName { get; set; }

public ICollection<Contact> Contacts { get; set; }

連絡先

public Guid Id { get; set; }
public string ContactName { get; set; }
public Guid OrganizationId { get; set; }

私がやろうとしているのは、ビューから追加および削除できる組織内のn個の連絡先のリストを用意し、OnPost()ページモデルメソッドを押したときにそれを反映させることです。


以前のプロジェクトでは、MVC5Webアプリは次のとおりです。

これら2つの組み合わせは次のようになります。MVC5BeginCollectionItemとPartialCRUD


現在の状態

~/ViewComponents/Contact.cs、私があります。

public class Contact : ViewComponent
{
    private readonly ApplicationDbContext _context;

    public Contact(ApplicationDbContext context)
    {
        _context = context;
    }

    public async Task<IViewComponentResult> InvokeAsync(Guid organizationId, Guid contactId)
    {
        var contact = new Models.Contact { Id = contactId, OrganizationId = organizationId };
        return View(contact);
    }
}

を呼び出す~/Pages/Shared/Components/Contact/Default.cshtmlBeginCollectionItemの移植バージョンを使用します

@model Models.Contact

@using (Html.BeginCollectionItem("Contacts"))
{
    <div class="row">
        <input asp-for="Id" type="hidden" />
        <input asp-for="OrganizationId" type="hidden"/>
        <input asp-for="ContactName" class="form-control"/>
    </div>
}

次に、これをOrganiztionに直接ロードします~/Pages/Organizations/Create.cshtml

@page
@using System.Linq
@using ViewComponents
@model CreateModel

@{
    ViewData["Title"] = "Create";
}

<h2>Create</h2>

<h4>Organization</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div class="form-group">
                <input asp-for="Organization.OrganizationName" class="form-control" />
            </div>
            <div class="form-group">
                <label asp-for="OrganizationContacts" class="col-form-label"></label>
  <!-- HERE --> @await Component.InvokeAsync(nameof(ViewComponents.Contact), new { organizationId = Model.Organization.Id, contactId = Guid.NewGuid() })
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

[送信]ボタンをクリックすると、次のOnPostAsync()メソッドがヒットしますCreate.cshtml.cs

public class CreateModel : PageModel
{
    private readonly ApplicationDbContext _context;

    [BindProperty]
    public Organization Organization { get; set; }

    public CreateModel(ApplicationDbContext context, IMapper mapper)
    {
        _context = context;
    }

    public IActionResult OnGet()
    {
        Organization = new Organization{ Contacts = new List<Contact>() };
        return Page();
    }

    public async Task<IActionResult> OnPostAsync()
    {
        _context.Organizations.Add(Organization); // <--- Always has an empty Contacts list
        await _context.SaveChangesAsync();

        return RedirectToPage("./Index");
    }
}

を押すOnPostAsyncと、バインドされたOrganizationモデルのOrganizationNameContactsは問題ありませんが、リストは常に空です。

Contacts後でn個の連絡先を追加または削除したいのに、組織のリストに連絡先を追加するにはどうすればよいですか?

この種の質問に対する私が見たほとんどの回答にはforループがありますが、組織内の連絡先の数を事前に知る必要があり、それは私には当てはまりません。

エドワード

空を解決するにはContacts、に変更Html.BeginCollectionItem("Contacts")してみてくださいHtml.BeginCollectionItem("Organization.Contacts")

はのContactsコレクションでOrganizationあるため、渡す必要がありますOrganization.Contacts[index].Property。そうしないと、リクエストをモデルにバインドできません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CバインディングでコードをインポートするPickleモジュール

分類Dev

モジュールバンドラーなしでWebコンポーネントをインポートする

分類Dev

Webpackを使用してGatsbyコンポーネントをビルドすると、Gatsbyモジュールをトランスパイルできません

分類Dev

あるコンポーネントをモジュールから別のモジュールのコンポーネントにインポートする

分類Dev

Vueコンポーネントで外部Typescriptモジュールをインポートして使用する

分類Dev

Yii2コンポーネントビューからページタイトルを設定する

分類Dev

ビューページXamarinで複数のモデルをバインドする

分類Dev

Vueコンポーネント内でモデルをバインドする方法

分類Dev

Reactコンポーネントにノードモジュールをインポートできません

分類Dev

レイアウトページにRazorコンポーネントをロードする

分類Dev

レイアウトページにRazorコンポーネントをロードする

分類Dev

browserifyでスタンドアロンモジュールビルドをインポートする方法は?

分類Dev

モジュール間でコンポーネントを共有する

分類Dev

機能モジュールでコンポーネントを宣言する

分類Dev

角度で動的にロードされたモジュール コンポーネントで既存のコンポーネントを使用する方法

分類Dev

ページのリストビューでウィンドウのデータをバインドする

分類Dev

子モジュール内でインポートされたモジュールのコンポーネントを使用する

分類Dev

dotnetcoreのビューコンポーネント間でモデルを共有する

分類Dev

カスタムビューをxamarinフォームのページモデルにバインドする

分類Dev

特定のページ/コンポーネントのサイドナビゲーションバーを角度で非表示にする

分類Dev

インポートしたコードを特定のページでのみ実行するようにする[モジュールパターン+ ES6]

分類Dev

モジュールを介して複数のAngularコンポーネントをインポートする

分類Dev

Razorビューのテキストボックスにモデルをバインドする

分類Dev

angle2の子モジュールコンポーネントで親モジュールコンポーネントを使用する方法

分類Dev

機能モジュールのコンポーネントでアプリモジュールのコンポーネントを使用する

分類Dev

ビジュアルモードでX個のスペースをインデントします。vim

分類Dev

コードイグナイターのビュー/コントローラーでモデルを使用する

分類Dev

Angular 5 :(モジュール間で)コンポーネント間でデータを共有するサービス?

分類Dev

Angular4の複数のモジュールにコンポーネントをインポートする

Related 関連記事

  1. 1

    CバインディングでコードをインポートするPickleモジュール

  2. 2

    モジュールバンドラーなしでWebコンポーネントをインポートする

  3. 3

    Webpackを使用してGatsbyコンポーネントをビルドすると、Gatsbyモジュールをトランスパイルできません

  4. 4

    あるコンポーネントをモジュールから別のモジュールのコンポーネントにインポートする

  5. 5

    Vueコンポーネントで外部Typescriptモジュールをインポートして使用する

  6. 6

    Yii2コンポーネントビューからページタイトルを設定する

  7. 7

    ビューページXamarinで複数のモデルをバインドする

  8. 8

    Vueコンポーネント内でモデルをバインドする方法

  9. 9

    Reactコンポーネントにノードモジュールをインポートできません

  10. 10

    レイアウトページにRazorコンポーネントをロードする

  11. 11

    レイアウトページにRazorコンポーネントをロードする

  12. 12

    browserifyでスタンドアロンモジュールビルドをインポートする方法は?

  13. 13

    モジュール間でコンポーネントを共有する

  14. 14

    機能モジュールでコンポーネントを宣言する

  15. 15

    角度で動的にロードされたモジュール コンポーネントで既存のコンポーネントを使用する方法

  16. 16

    ページのリストビューでウィンドウのデータをバインドする

  17. 17

    子モジュール内でインポートされたモジュールのコンポーネントを使用する

  18. 18

    dotnetcoreのビューコンポーネント間でモデルを共有する

  19. 19

    カスタムビューをxamarinフォームのページモデルにバインドする

  20. 20

    特定のページ/コンポーネントのサイドナビゲーションバーを角度で非表示にする

  21. 21

    インポートしたコードを特定のページでのみ実行するようにする[モジュールパターン+ ES6]

  22. 22

    モジュールを介して複数のAngularコンポーネントをインポートする

  23. 23

    Razorビューのテキストボックスにモデルをバインドする

  24. 24

    angle2の子モジュールコンポーネントで親モジュールコンポーネントを使用する方法

  25. 25

    機能モジュールのコンポーネントでアプリモジュールのコンポーネントを使用する

  26. 26

    ビジュアルモードでX個のスペースをインデントします。vim

  27. 27

    コードイグナイターのビュー/コントローラーでモデルを使用する

  28. 28

    Angular 5 :(モジュール間で)コンポーネント間でデータを共有するサービス?

  29. 29

    Angular4の複数のモジュールにコンポーネントをインポートする

ホットタグ

アーカイブ