C# 传递两个值以查看?

C# 传递两个值以查看?,c#,asp.net,linq,linq-to-sql,asp.net-mvc-3,C#,Asp.net,Linq,Linq To Sql,Asp.net Mvc 3,我有一个查询,我需要获得post+它拥有的每个标记。但由于标签在单独的表中,这让我很难做到,原因有两个。我甚至不确定我是否需要传递两个值,也许我可以用不同的方式来传递 请注意,模型是使用LINQtoSQL类自动创建的 分贝 代码 问题 如您所见,我想将post传递到我的视图,这很有意义,但我需要以某种方式传递包含标记的tagList字符串。我该怎么做 我觉得我的问题不好。我对SQL/LINQ没有经验,所以这是我唯一想到的。也许我可以做同样的事情,稍微“聪明点” 好的,谢谢你的回答。Vie

我有一个查询,我需要获得post+它拥有的每个标记。但由于标签在单独的表中,这让我很难做到,原因有两个。我甚至不确定我是否需要传递两个值,也许我可以用不同的方式来传递

请注意,模型是使用LINQtoSQL类自动创建的


分贝

代码 问题
  • 如您所见,我想将
    post
    传递到我的视图,这很有意义,但我需要以某种方式传递包含标记的
    tagList
    字符串。我该怎么做

  • 我觉得我的问题不好。我对SQL/LINQ没有经验,所以这是我唯一想到的。也许我可以做同样的事情,稍微“聪明点”


  • 好的,谢谢你的回答。ViewBag和创建BlogViewModel都很好。我想我会选择BlogViewModel。但是我的第二个问题仍然存在。

    您是否考虑过创建一个包含这两个对象的ViewModel,并将该ViewModel传递给您的视图?您还可以使用LINQ来改进查询

    (注意:我在手机上发布此消息,以便语法可以关闭)

    型号:

    public class TaggingModel
    {
       public string TagList {get; set;}
       public PostClass Post {get; set;}
    }
    
    public TaggingModel(string tagList, Post post)
    {
        this.TagList = tagList;
        this.YourPost = post;
    }
    
    var post = _db.Posts.Where(pt => pt.PostID == id).Single();
    var postTags = post.PostTags.Where(pt => pt.PostID == id);
    
    string tagList = string.Empty;
    
    foreach(var pt in postTags)
    {
         var tag = _db.Tags.Where(t => t.ID == pt.TagID).Single(); 
         tagList += tag.Name + " ";
    }
    
    TaggingModel model = new TaggingModel(tagList, post);
    
    return View(model);
    
    代码(使用LINQ):

    public class TaggingModel
    {
       public string TagList {get; set;}
       public PostClass Post {get; set;}
    }
    
    public TaggingModel(string tagList, Post post)
    {
        this.TagList = tagList;
        this.YourPost = post;
    }
    
    var post = _db.Posts.Where(pt => pt.PostID == id).Single();
    var postTags = post.PostTags.Where(pt => pt.PostID == id);
    
    string tagList = string.Empty;
    
    foreach(var pt in postTags)
    {
         var tag = _db.Tags.Where(t => t.ID == pt.TagID).Single(); 
         tagList += tag.Name + " ";
    }
    
    TaggingModel model = new TaggingModel(tagList, post);
    
    return View(model);
    

    您还可以使用其他方法发送消息,例如,如果不想为其实现模型,则将其存储在ViewData中。

    定义一个视图模型类,该类具有post属性和标记列表属性,并在调用View()时传递该类.

    您可以使用ViewBag动态对象或ViewData传递一个项目,使用第二个项目作为视图的模型。还可以定义viewmodel类,或使用元组

    ViewData["tags"] = tagsList;
    return View(post);
    
    或者,如果不想创建viewmodel,但仍然需要强类型视图

    return View(Tuple.Create(post, tagsList));
    

    我更喜欢创建包含两个不同对象和属性的模型:

    public class EditPageModel()
    {
        public PostClass Post (get; set;}
        public string TagList {get; set;}
    }
    
    然后返回这个:

    return View (new EditPageModel(){Post = post, TagList = tagList});
    

    如何在视图中使用Tuple方法访问标记列表?Tuple类具有Item1、Item2、Item3等属性名称,具体取决于属性计数。假设视图中有类似于Tuple的模型,则可以使用model.Item2访问标记列表