5

我开发 ASP.NET Forms 已经有一段时间了,现在正在尝试学习 MVC,但是如何让它做我想做的事情并不完全有意义。也许我需要换个角度思考问题。这是我试图用一个虚构的例子做的事情:

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

这不是我的代码,但显示了我正在尝试做的事情。

文件:控制器/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 传递给部分?

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

在此先感谢您的帮助。

4

2 回答 2

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);
}

这应该可以解决问题。

于 2013-03-01T15:34:48.703 回答
1

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

于 2015-03-28T23:49:56.013 回答