如何在一个视图中显示来自两个不同表的数据

时间:2012-02-27 11:25:41

标签: asp.net-mvc asp.net-mvc-3 razor

我正在创建一个论坛,用户可以使用mvc3

提出问题和评论

在里面我有一个链接“详细信息”为每个问题....在一边,我有2个更多的链接“显示”和“添加评论” 在节目中,我可以看到与特定问题相关的所有评论

在添加评论中,我们可以为特定问题添加评论 其控制器代码如下:

   public ActionResult Addnew(int id)
    {
              return View();
    }
    [HttpPost]
    public ActionResult Addnew(Answer answr, int id)
    {
        answr.QuestionQId = id;
        _db.Answers.Add(answr);
        _db.SaveChanges();
        return RedirectToAction("Index");
    }

并且在视图中我写道:

@model Hobby.Models.Answer

@{
  ViewBag.Title = "Addnew";
}

<h2>Addnew</h2>

    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

        @using (Html.BeginForm()) {
         @Html.ValidationSummary(true)
             <fieldset>
             <legend>Answer</legend>
            <div class="display-label">Question</div>
             <div class="display-field">
           @Html.DisplayFor(model => model.Question.Que)
         </div>

             <div class="editor-label">
                @Html.LabelFor(model => model.Ans)
            </div>
            <div class="editor-field">
                  @Html.EditorFor(model => model.Ans)
                    @Html.ValidationMessageFor(model => model.Ans)
            </div>
              <p>
                 <input type="submit" value="Add Comment" />
               </p>
            </fieldset>
        }
  <div>
   @Html.ActionLink("Back to List", "Index")
 </div>

但它没有在问题表中显示问题..... 请帮帮我

2 个答案:

答案 0 :(得分:1)

我没有看到你绑定必要数据的位置我认为AddNew [Get]方法应该从DB获取问题并将其设置为视图,我想你应该做类似的事情

public ActionResult Addnew(int id)
    {
              Answer ans = new Answer();
              ans.Question = _db.Questions.SingleOrDefault(q => q.Id == id);
              return View(ans);
    }

答案 1 :(得分:0)

@Jayanga是对的,但我认为您仍然希望显示“2表”中的数据,如您在问题标题中所述。假设你想要显示问题和所有相关答案,并假设这是.NET实体框架(不清楚Linq2Sql的语法),你会这样做:

public ActionResult Addnew(int id)
{
    var question = _db.Questions.Include("Answers").SingleOrDefault(q => q.Id == id);
    return View(question);
}

这会将您的绑定模型类型更改为Question,但我假设一个问题可以有多个答案,在这种情况下,您将在View中拥有所需的所有信息...类似于这样:

// In your .cshtml file
<article class="question">@Model.Que</article> @* this is your question text *@
@foreach (var answer in Model.Answers.OrderBy(a => a.PostedDate)) { @* assuming you want to sort this *@
    <article class="answer">@answer.Ans</article> @* this would be your answer text *@
}