3

d2admin と PartyWeb の 2 つのプロジェクトがあります。

d2admin は実際の UI であり、必要なすべての css、js、ビューなどと、必要に応じてコントローラーが含まれます。

PartyWeb には、Party の各テーブルのコントローラーがあります。

組織というテーブルがあるとします。このテーブルのコントローラーは PartyWe/Controllers フォルダーにあります。

d2admin でビューを取得します。

さて、私の問題は、Organization.cshtml が d2admin に存在するビューから、PartyWeb に存在する OrganizationController をどのように呼び出すことができるかということです。

私は Html.RenderAction で試しました。これは、取得している diff プロジェクトのコントローラーを呼び出すときに、同じコントローラーが存在するために機能します-メソッド例外がありません。

4

2 に答える 2

1

これは古い質問であり、すでに回答が受け入れられていることを認めます。しかし、私は同じ問題に遭遇し、それを解決することができたので、私の経験を共有したいと思います.

私が理解していることから、次のことが真実です。

  • d2admin は Web サイトのフロント エンドを処理するコードであり、コントローラーはビューやビュー モデルを駆動するために使用されます。
  • PartyWeb は、ドメイン レベルで API として使用され、一部のデータソースと対話します。
  • OrganizationController は、データソースから d2admin プロジェクト (およびその逆) にデータを取得するために使用するコントローラーです。

そのすべてを念頭に置いて、部分ビューの力を生み出してください!

d2admin/Views/SomeController.cshtml にある非常に単純なビューを使用してみましょう。ここで、SomeController は、これらのビューに関連付けられたコントローラーを反映するフォルダーです。

<h3>A Very Basic View</h3>

@Html.Partial("_SomePartialView", OrganizationController.GetOrganizations())

このビューにはモデルがなく、パーシャルを呼び出し、そのモデルがすぐそこに取り込まれていることに注意してください...それだけです! _SomePartialView.cshtml はどのように記述すればよいでしょうか。

これを d2admin/Views/Shared フォルダーに配置するため、フル パスは d2admin/Views/Shared/_SomePartialView.cshtml になります。ファイルは次のようになります

@model IEnumerable<PartyWeb.Models.Organization>

<div>
   @foreach(var o in Model){
       @Html.DisplayFor(modelItem => item.Id)
       @Html.DisplayFor(modelItem => item.Name)
       <br/>
   }
</div>

ご覧のとおり、このビューには、以下が PartyWeb/Models/Organization.cs にあるモデルであると仮定して、いくつかの基本的な情報が表示されます。

public class Organization
{
    public int Id {get; set;}
    public string Name {get; set;}
    // some additional properties
}

最後に、 OrganizationController.cs 内で、部分ビューのモデルにデータをバインドできるようにする静的アクションを追加する必要があります。したがって、以下を追加します。

public class OrganizationController : ApiController
{
    // Some Other Actions

    [HttpGet]
    public static List<Organization> GetOrganizations()
    {
        var dataSource = GetDataSource(); // Some Method that exposes the datasource
        return ReadAllOrganizations(dataSource); // Some method that allows us to read all of the organiztions from the dataSource, i.e. some sql that executes against a database.
    }
}
于 2016-01-05T17:27:24.483 に答える