2013-07-09 26 views
1

我正在嘗試在頁面底部創建一個帶有註釋的博客詳細頁面。我使用我的「Post」模型作爲我的評論的一些屬性和導航列表屬性。MVC 4 - 兩個模型的詳細頁面

我想要做的是在頁面的最底部創建一個表單來添加一條新評論。由於我使用不同的模型進行評論,所以我很難弄清楚如何創建這樣的場景。

感謝您的任何建議。

編輯 這裏是一個更好的解釋了一些代碼:

@model Skuami.Models.PostModel 
@{ 
    ViewBag.Title = Model.Title; 
} 

<div class="blogContentBox"> 
    <div class="blogImage"> 
     <img src="@Model.Image" /> 
    </div> 
    <div class="blogContent"> 
     <div class="blogDate">@Model.CreateDate</div> 
     <p class="blogTitle">@Model.Title</p> 
     @Model.Content 
    </div> 
</div> 

<p class="commentTitle"> 
    @Model.Comments.Count @(Model.Comments.Count == 1 ? " comment" : " comments") 
</p> 

@foreach (var item in Model.Comments) 
{ 
    <div class="commentBox"> 
     <p class="commentName">@item.Name</p> 
     <p class="commentDate">@item.CreateDate</p> 
     @item.Message 
    </div> 
} 

<div class="commentBox"> 
    <p class="commentReply">Leave a Reply</p> 

    @using (Html.BeginForm("Details", "Home", FormMethod.Post, new { @class = "CommentModel" })) 
    { 

     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(true) 

     <fieldset> 
      <legend></legend> 

      <div class="editor-label"> 
       @Html.LabelFor(model => model.Comments.Name) <!-- how can I use a 2nd model --> 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.Name) <!-- how can I use a 2nd model --> 
       @Html.ValidationMessageFor(model => model.Name) 
      </div> 

      <div class="editor-label"> 
       @Html.LabelFor(model => model.Message) <!-- how can I use a 2nd model --> 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.Message) <!-- how can I use a 2nd model --> 
       @Html.ValidationMessageFor(model => model.Message) 
      </div> 

      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 
    } 
</div> 

回答

4

您使用ViewModel。基本上,它是適用於所有的包裝:

public class BlogDetailViewModel { 
    public Post Post { get; set; } 
    public IList<Comment> Comments { get; set; } 
    public Comment NewComment { get; set; } 
} 

然後,您認爲需要BlogDetailViewModel類型的模型。您將使用NewComment作爲新的:

@Html.TextBoxFor(x => x.NewComment.Email) 
@Html.TextBoxFor(x => x.NewComment.CommentContent) 

..等等。

在你的控制器..你構建它:

return View(new BlogDetailViewModel() { Post = thePostVariable, Comments = getCommentsForPost(), NewComment = new Comment() }); 

在後,你NewComment成員將包含新的註釋數據。

+0

他的模型已經有了評論,他正在試圖弄清楚如何獲取發佈數據,我想。 –

+0

@RobertMcKee我意識到,我鍵入它之後。修復.. –

+0

很好的答案。我認爲應該有辦法從Comment集合中檢索它,但這更簡單,更直觀。 –

0

型號

​​

查看

@model TwoModelInSinglePage.Models.RegisterModel 
@{ 
    Layout = null; 
} 
    @using (Html.BeginForm("Index", "Content", FormMethod.Post, new { id = "FrmIndex" })) 
     { 
      <div> 
       @Html.LabelFor(m => m.Name) 
       @Html.TextBoxFor(m => m.Name) 
       @Html.ValidationMessageFor(m => m.Name) 
      </div> 
      <br /> 
      <div> 
       @Html.LabelFor(m => m.Address) 
       @Html.TextBoxFor(m => m.Address) 
       @Html.ValidationMessageFor(m => m.Address) 
      </div> 
      <br /> 
      <div> 
       @Html.LabelFor(m => m.PhoneNo) 
       @Html.TextBoxFor(m => m.PhoneNo) 
       @Html.ValidationMessageFor(m => m.PhoneNo) 
      </div> 
      <div> 
       @Html.LabelFor(m => m._Customer.customerName) 
      @Html.TextBoxFor(m => m._Customer.customerName) 
      @Html.ValidationMessageFor(m => m._Customer.customerName) 
      </div> 
} 
0

讓您的評論形式的局部視圖,該職位地方,並返回到網頁上,還是一些AJAX,這可能是更好的選擇在這裏,因爲它提供更好的用戶體驗。