我已经开发了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传递给部分?
这是我期望的一个非常基本的问题,但我还没有找到一个涵盖这个问题的教程。
提前感谢您的帮助。
答案 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方法关闭它...无论哪种方式,我相信你需要确保释放这些资源以保持平稳运行。我知道这不是问题,但我看到它看起来很脆弱。