Asp.net mvc 4 具有独立控制器和视图的MVC 4部分

Asp.net mvc 4 具有独立控制器和视图的MVC 4部分,asp.net-mvc-4,controller,partial,Asp.net Mvc 4,Controller,Partial,我开发ASP.NET表单已经有一段时间了,现在我正在尝试学习MVC,但是如何让它实现我想要的功能还没有完全意义。也许我需要以不同的方式思考问题。下面是我试图用一个虚构的例子来做的: 目标-使用部分文件,该文件可以放置在站点上接受参数的任何位置。该参数将用于转到数据库并将结果模型传回视图。然后,该视图将显示一个或多个模型属性 这不是我的代码,但显示了我正在尝试做什么 文件:Controllers/UserController.cs [ChildActionOnly] public ActionRe

我开发ASP.NET表单已经有一段时间了,现在我正在尝试学习MVC,但是如何让它实现我想要的功能还没有完全意义。也许我需要以不同的方式思考问题。下面是我试图用一个虚构的例子来做的:

目标-使用部分文件,该文件可以放置在站点上接受参数的任何位置。该参数将用于转到数据库并将结果模型传回视图。然后,该视图将显示一个或多个模型属性

这不是我的代码,但显示了我正在尝试做什么

文件:Controllers/UserController.cs

[ChildActionOnly]
public ActionResult DisplayUserName(string userId)
{
MyDataContext db = new MyDataContext()

var user = (from u in db.Users where u.UserId = userId select u).FirstOrDefault();

return PartialView(user);
}
文件:Views/Shared/_DisplayUserName.cs

@model DataLibrary.Models.User

<h2>Your username is: @Model.UserName</h2>
@model DataLibrary.Models.User
您的用户名是:@Model.username
文件:Views/About/Index.cshtml

@{
    ViewBag.Title = "About";
}

<h2>About</h2>

{Insert Statement Here}
@{
ViewBag.Title=“关于”;
}
关于
{在此处插入语句}
我知道此时我需要呈现一个名为DisplayUserName的分部,但它如何知道要使用哪个视图,以及如何将我的用户ID传递给分部

这是我所期望的一个非常基本的问题,但我还没有找到一个教程来涵盖这一点


提前感谢您的帮助。

您应该调用Html.Action或Html.RenderAction,如:

@Html.Action("DisplayUserName", "User", new {userId = "pass_user_id_from_somewhere"});
你的行动应该是:

[ChildActionOnly]
public ActionResult DisplayUserName(string userId)
{
    MyDataContext db = new MyDataContext()

    var user = (from u in db.Users where u.UserId = userId select u).FirstOrDefault();

    return PartialView("_DisplayUserName", user);
}

这应该可以解决问题。

我总是确保关闭MyDataContext。。。也许把所有的东西都放在using语句中。。。如果您注意到VS为您执行此操作时,他们会在控制器类(控制器外部)中将实体创建为私有变量,然后使用dispose方法将其关闭。。。无论哪种方式,我相信您都需要确保释放这些资源以保持事情顺利进行。我知道这不在问题中,但我看到它看起来很脆弱。

感谢您的快速回复和正确回复-它成功了!我尝试了很多关于结构和@html.Options的偏差,但都没有成功。我知道当你知道怎么做的时候事情会很简单!再次感谢你的帮助。