3 回答
TA贡献1744条经验 获得超4个赞
我完全同意尽可能使用视图模型的建议。它们更容易使用,即使它们有时看起来有点矫枉过正。
也就是说,要回答您的问题,您可以使用 a Tuple:
public IActionResult Test(string id)
{
var user = context.Users.First(x => x.Id.ToString() == id);
var message = "abc";
// The generic types will be inferred here so they're not necessary
// but I've added them for clarity in the example.
var viewModel = Tuple.Create<User, string>(user, message);
return View("Edit", viewModel);
}
然后在视图中,你需要这个:
@model Tuple<User, string>
只需确保将正确的命名空间添加到User视图中的类型。
编辑
为了完整ValueTuple起见,下面是使用C# 7 中的a 的示例,下面是 Adam 的评论:
public IActionResult Test(string id)
{
var user = context.Users.First(x => x.Id.ToString() == id);
var message = "abc";
return View("Edit", (user, message));
}
如果您使用 .NET Core 2.1 及更高版本,则视图的model指令将变为:
@model (User user, string message)
然后你会像这样访问那些:
@Model.user
否则,您将需要使用(从评论中归功于@AdamSimon):
@model ValueTuple<User, string>
var (user, message) = Model;
有关详细信息,请参阅MSDN 上的C# 7.0 中的新增功能博客文章。
TA贡献1802条经验 获得超5个赞
您可以使用 ViewBag,但要注意它的内容不是强类型的。
控制器
public IActionResult Test(string id)
{
(...)
ViewBag.User = context.Users.First(x => x.Id.ToString() == id);
ViewBag.Message = "abc";
return View("Edit");
}
看法
@{
User user = ViewBag.User as User;
string message = ViewBag.Message as string;
}
TA贡献1815条经验 获得超13个赞
尝试使用匿名对象:
public IActionResult Test(string id)
{
(...)
var user = context.Users.First(x => x.Id.ToString() == id);
var message = "abc";
return View("Edit", new {User = user, Message = message});
}
- 3 回答
- 0 关注
- 198 浏览
添加回答
举报