MVC 4部分与单独的控制器和视图

时间:2013-03-01 15:17:34

标签: asp.net-mvc-4 controller partial

我已经开发了ASP.NET Forms一段时间了,现在我正在尝试学习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>

文件:Views / About / Index.cshtml

@{
    ViewBag.Title = "About";
}

<h2>About</h2>

{Insert Statement Here}

我知道此时我需要渲染一个名为DisplayUserName的部分,但是它如何知道要使用哪个视图以及如何将userId传递给部分?

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

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

您应该调用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);
}

这应该可以解决问题。

答案 1 :(得分:1)

我总是确保关闭MyDataContext ...也许将所有内容都包含在using语句中...如果你注意到VS为你做了什么,他们会在Controller类中创建实体作为私有变量(在控制器之外) )然后用dispose方法关闭它...无论哪种方式,我相信你需要确保释放这些资源以保持平稳运行。我知道这不是问题,但我看到它看起来很脆弱。