C# MVC 4-包含两个模型的详细信息页面
我正在尝试创建一个博客详细信息页面,页面底部有评论。我使用我的“Post”模型作为我评论的一些属性和导航列表属性 我想做的是在页面的最底部创建一个表单来添加新的评论。由于我对评论使用了不同的模型,我很难想出如何创建这样的场景 谢谢你的建议 编辑 下面是一些代码,以便更好地解释:C# MVC 4-包含两个模型的详细信息页面,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我正在尝试创建一个博客详细信息页面,页面底部有评论。我使用我的“Post”模型作为我评论的一些属性和导航列表属性 我想做的是在页面的最底部创建一个表单来添加新的评论。由于我对评论使用了不同的模型,我很难想出如何创建这样的场景 谢谢你的建议 编辑 下面是一些代码,以便更好地解释: @model Skuami.Models.PostModel @{ ViewBag.Title = Model.Title; } <div class="blogContentBox"> &
@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>
@model Skuami.Models.PostModel
@{
ViewBag.Title=Model.Title;
}
@Model.CreateDate
@Model.Title
@模型.内容
@Model.Comments.Count@(Model.Comments.Count==1?“注释”:“注释”)
@foreach(Model.Comments中的var项)
{
@item.Name
@item.CreateDate
@项目.消息
}
留下答复
@使用(Html.BeginForm(“Details”,“Home”,FormMethod.Post,new{@class=“CommentModel”}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@LabelFor(model=>model.Comments.Name)
@EditorFor(model=>model.Name)
@Html.ValidationMessageFor(model=>model.Name)
@LabelFor(model=>model.Message)
@EditorFor(model=>model.Message)
@Html.ValidationMessageFor(model=>model.Message)
}
您使用的是ViewModel
。基本上,它是所有东西的包装:
public class BlogDetailViewModel {
public Post Post { get; set; }
public IList<Comment> Comments { get; set; }
public Comment NewComment { get; set; }
}
……等等
在控制器中。。您构建它:
return View(new BlogDetailViewModel() { Post = thePostVariable, Comments = getCommentsForPost(), NewComment = new Comment() });
在post上,您的
NewComment
成员将包含新的评论数据。您使用的是ViewModel
。基本上,它是所有东西的包装:
public class BlogDetailViewModel {
public Post Post { get; set; }
public IList<Comment> Comments { get; set; }
public Comment NewComment { get; set; }
}
……等等
在控制器中。。您构建它:
return View(new BlogDetailViewModel() { Post = thePostVariable, Comments = getCommentsForPost(), NewComment = new Comment() });
在post上,您的新成员将包含新的评论数据。模型
public class CustomerModel
{
public int CustomerId { get; set; }
public string customerName { get; set; }
public List<SelectListItem> customerNameList { get; set; }
}
public class RegisterModel
{
public int ID { get; set; }
public string Name { get; set; }
public string PhoneNo { get; set; }
public string Address { get; set; }
public CustomerModel _Customer { get; set; }
}
公共类CustomerModel
{
public int CustomerId{get;set;}
公共字符串customerName{get;set;}
公共列表自定义列表{get;set;}
}
公共类注册器模型
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共字符串PhoneNo{get;set;}
公共字符串地址{get;set;}
公共客户模型_客户{get;set;}
}
看法
@model TwoModelInSinglePage.Models.RegisterModel
@{
布局=空;
}
@使用(Html.BeginForm(“Index”,“Content”,FormMethod.Post,new{id=“FrmIndex”}))
{
@LabelFor(m=>m.Name)
@Html.TextBoxFor(m=>m.Name)
@Html.ValidationMessageFor(m=>m.Name)
@LabelFor(m=>m.Address)
@Html.TextBoxFor(m=>m.Address)
@Html.ValidationMessageFor(m=>m.Address)
@LabelFor(m=>m.PhoneNo)
@Html.TextBoxFor(m=>m.PhoneNo)
@Html.ValidationMessageFor(m=>m.PhoneNo)
@LabelFor(m=>m._Customer.customerName)
@Html.TextBoxFor(m=>m.\u Customer.customerName)
@Html.ValidationMessageFor(m=>m.\u Customer.customerName)
}
型号
公共类CustomerModel
{
public int CustomerId{get;set;}
公共字符串customerName{get;set;}
公共列表自定义列表{get;set;}
}
公共类注册器模型
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共字符串PhoneNo{get;set;}
公共字符串地址{get;set;}
公共客户模型_客户{get;set;}
}
看法
@model TwoModelInSinglePage.Models.RegisterModel
@{
布局=空;
}
@使用(Html.BeginForm(“Index”,“Content”,FormMethod.Post,new{id=“FrmIndex”}))
{
@LabelFor(m=>m.Name)
@Html.TextBoxFor(m=>m.Name)
@Html.ValidationMessageFor(m=>m.Name)
@LabelFor(m=>m.Address)
@Html.TextBoxFor(m=>m.Address)
@Html.ValidationMessageFor(m=>m.Address)
@LabelFor(m=>m.PhoneNo)
@Html.TextBoxFor(m=>m.PhoneNo)
@Html.ValidationMessageFor(m=>m.PhoneNo)
@LabelFor(m=>m._Customer.customerName)
@Html.TextBoxFor(m=>m.\u Customer.customerName)
@Html.ValidationMessageFor(m=>m.\u Customer.customerName)
}
使您的评论形成一个局部视图,在某处发布并返回页面,或者使用一些AJAX,这可能是更好的选择,因为它提供了更好的用户体验。使您的评论形成一个局部视图,在某处发布并返回页面,或者使用一些AJAX,这可能是更好的选择,因为它提供了更好的用户体验。他的模型已经有了评论,我认为他正在试图找出如何获得帖子数据。回答不错。我想应该有一种方法可以从评论集合中检索它,但这更简单、更直观。谢谢,这是解决问题的好方法。我还试图通过我的帖子模型的评论集合检索数据。他的模型已经有了评论,他正在试图找出如何获取帖子数据,我认为