asp.net-mvc-4 - 从 MVC4 中的 View 调用另一个项目的 Controller

标签 asp.net-mvc-4 razor-2

我有两个项目,d2admin 和 PartyWeb。

d2admin 是实际的 UI,它将包含所有必要的 css、js 和 View 等,如果需要,还有 Controller 。

PartyWeb 为 Party 中的每个表都设置了 Controller 。

假设我有一个名为 - Organization 的表。该表的 Controller 将位于 PartyWe/Controllers 文件夹中。

我将在 d2admin 中查看。

现在我的问题是如何从 d2admin 中存在的 Organization.cshtml View 调用 PartyWeb 中存在的 OrganizationController?

我尝试使用 Html.RenderAction,这适用于存在于同一个 Controller 中的 Controller ,当我调用 diff 项目的 Controller 时,我得到了 - 缺少方法异常。

最佳答案

我发现您的问题很有趣,因此决定亲自测试一下。我创建了两个 MVC 项目(但其中一个也可以是类库,虽然我很懒)。第一个 MVC 项目成为具有路由和 View 的主要项目,第二个项目获得模型和 Controller 。它从一开始就非常有效,这就是我的做法。

我在第二个项目中创建了模型,在我的示例中名为 Car(名称 UsersContext 保留在默认文件中,因为我想尽可能少地更改)。

namespace PartyBiz.Models
{
    public class UsersContext : DbContext
    {
        public UsersContext()
            : base("DefaultConnection")
        {
        }

        public DbSet<Car> Cars { get; set; }
    }

    [Table("Cars")]
    public class Car
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int CarId { get; set; }
        public string CarName { get; set; }
    }
}

然后我构建了项目并创建了一个带有 EF 连接到 Car 的 Controller (通过右键单击 Controller 文件夹并选择MVC controller with read/write actions and views, using Entity Framework) p>

完成后 Controller 看起来像这样(为了使示例简短,删除了许多行)

namespace PartyBiz.Controllers
{
    public class CarController : Controller
    {
        // UsersContext is a left over from the default MVC project
        private UsersContext db = new UsersContext();

        public ActionResult Index()
        {
            return View(db.Cars.ToList());
        }

        // Many other actions follows here...
    }
}

我通过拖放将在第二个项目 (PartyBiz) 中创建的 View 复制到第一个项目 (d2admin)。然后我从第二个项目中删除了 View 以确保它们没有在那里使用。

我还必须将第一个项目(带有 View )的引用添加到第二个项目(模型和 Controller )。之后运行第一个项目就可以正常运行了。

我继续在模型- Controller -项目中启用迁移,并毫无问题地建立了数据库连接。我可以看到 Controller 设法保存数据,即使它位于不同的项目中。

我希望这可以帮助你...

编辑: 在第一个项目 (d2admin) 的 View 中使用以下代码工作正常,即使所引用的 Car Controller 存在于第二个项目中。这个链接在第一个项目的home(controller)/index(view)中使用。

@Html.ActionLink("Go to the cars", "Index", "Car")

编辑2: 这是汽车 Controller 的索引 View 。该 View 位于 d2admin 中,并引用了 PartyBiz 项目中的 Controller 。

@model IEnumerable<PartyBiz.Models.Car>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.CarName)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CarName)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.CarId }) |
            @Html.ActionLink("Details", "Details", new { id=item.CarId }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.CarId })
        </td>
    </tr>
}
</table>

关于asp.net-mvc-4 - 从 MVC4 中的 View 调用另一个项目的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17058580/

相关文章:

c# - 在 LINQ 中重新排序记录

c# - 在 Asp.net MVC4 中访问 ViewBag 时出现 NullReferenceException

asp.net-mvc - 将动态 JSON 对象传递给 Web API - Newtonsoft 示例

javascript - 如何在Asp.Net Mvc4中检查验证码后传递Email Id值?

c# - 从 Grid MVC 提交多行

asp.net-mvc - MvcSiteMapProvider 安装错误

razor - 在非 MVC 项目中使用 RazorEngine 3 呈现电子邮件会引发 TemplateCompilationException

c# - WCF 中的 WCF 服务引用未正确获取方法类型

c# - 错误 22 无法从程序集中加载 "EnsureBindingRedirects"任务

asp.net-mvc - VS 2015 : Could not load file or assembly 'System. Web.WebPages.Razor,版本=2.0.0.0