1

ページの下部にコメントがあるブログ詳細ページを作成しようとしています。私はコメントのいくつかのプロパティとナビゲーションリストプロパティとして「投稿」モデルを使用しています。

私がやりたいことは、ページの一番下に新しいコメントを追加するためのフォームを作成することです。コメントには別のモデルを使用しているため、このようなシナリオの作成方法を理解するのに苦労しています。

提案をありがとう。

EDIT ここに、より良い説明のためのいくつかのコードがあります:

@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

3 に答える 3

4

を使用しViewModelます。基本的に、これはすべてのラッパーです。

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

次に、ビューは type のモデルを取りますBlogDetailViewModelNewComment新しいものに使用します:

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

..等。

あなたのコントローラーで..あなたはそれを構築します:

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

投稿時に、NewCommentメンバーには新しいコメント データが含まれます。

于 2013-07-09T05:53:35.580 に答える
0

コメントをどこかに投稿してページに戻る部分的なビューにするか、AJAX を実行します。これは、ユーザー エクスペリエンスが向上するため、ここではおそらくより良いオプションです。

于 2013-07-09T07:29:30.037 に答える