猿问

是否可以在不创建视图模型的情况下返回模型和字符串?

我想实现这样的目标:


public IActionResult Test(string id)

{

    (...)


    var user = context.Users.First(x => x.Id.ToString() == id);

    var message = "abc";


    return View("Edit", user, message);

}

这可能不创建 ViewModel 吗?


牛魔王的故事
浏览 204回答 3
3回答

慕无忌1623718

我完全同意尽可能使用视图模型的建议。它们更容易使用,即使它们有时看起来有点矫枉过正。也就是说,要回答您的问题,您可以使用 a Tuple:public IActionResult Test(string id){&nbsp; &nbsp; var user = context.Users.First(x => x.Id.ToString() == id);&nbsp; &nbsp; var message = "abc";&nbsp; &nbsp; // The generic types will be inferred here so they're not necessary&nbsp; &nbsp; // but I've added them for clarity in the example.&nbsp; &nbsp; var viewModel = Tuple.Create<User, string>(user, message);&nbsp; &nbsp; return View("Edit", viewModel);}然后在视图中,你需要这个:@model Tuple<User, string>只需确保将正确的命名空间添加到User视图中的类型。编辑为了完整ValueTuple起见,下面是使用C# 7 中的a 的示例,下面是 Adam 的评论:public IActionResult Test(string id){&nbsp; &nbsp; var user = context.Users.First(x => x.Id.ToString() == id);&nbsp; &nbsp; var message = "abc";&nbsp; &nbsp; 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 中的新增功能博客文章。

12345678_0001

您可以使用 ViewBag,但要注意它的内容不是强类型的。控制器public IActionResult Test(string id){&nbsp; &nbsp; (...)&nbsp; &nbsp; ViewBag.User = context.Users.First(x => x.Id.ToString() == id);&nbsp; &nbsp; ViewBag.Message = "abc";&nbsp; &nbsp; return View("Edit");}看法@{&nbsp; &nbsp; User user = ViewBag.User as User;&nbsp;&nbsp; &nbsp; string message = ViewBag.Message as string;}

萧十郎

尝试使用匿名对象:public IActionResult Test(string id){&nbsp; &nbsp; (...)&nbsp; &nbsp; var user = context.Users.First(x => x.Id.ToString() == id);&nbsp; &nbsp; var message = "abc";&nbsp; &nbsp; return View("Edit", new {User = user, Message = message});}
随时随地看视频慕课网APP
我要回答