use*_*213 2 c# sql linq asp.net asp.net-mvc
我正处于asp.net MVC开发的基础阶段.所以有时候我很难用简单的LINQ查询来工作.
scenario-
我有一个页面,有一些Image
用户评论该图像(就像Facebook上的帖子包含用户的评论).
所以我从textarea保存这些注释并通过Ajax查询发送Image ID.
这是我的控制器动作方法 -
保存评论 -
[HttpPost]
public void SaveComment(CardModel card) {
CardCommentTable commenttable = new CardCommentTable();
commenttable.CardComment = card.cardComment;
commenttable.FKcardID = card.cardID;
db.CardCommentTables.InsertOnSubmit(commenttable);
db.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
此注释保存在CardCommentTable
具有Table的外键引用的表中,即保存图像.
在查看页面上呈现图像和其他字段 -
此查询呈现Image和其他使其成为An Image帖子的字段.像title
,dateofsubmit
,Like
等等.
public ActionResult CardDetails(CardModel card) {
var cardDetail = (from u in db.CardTables
where u.CardID == card.cardID
select new CardModel {
cardID = u.CardID,
cardHashCode = u.CardHashCode,
cardDate = u.CardDate,
cardFileName = u.CardFileName,
cardFilePath = u.CardFilePath,
cardTitle = u.CardTitle
}).ToList();
return View(cardDetail);
}
Run Code Online (Sandbox Code Playgroud)
现在,在cardTable
我还有一个列cardComment
中,我希望从表中显示所有保存的注释CardCommentTable
.
所以我试过 -
public ActionResult CardDetails(CardModel card) {
var allsavedcomments= (from u in db.CardCommentTables
where u.FKcardID == card.cardID
select u).ToList();
var cardDetail = (from u in db.CardTables
where u.CardID == card.cardID
select new CardModel {
cardID = u.CardID,
cardHashCode = u.CardHashCode,
cardDate = u.CardDate,
cardFileName = u.CardFileName,
cardFilePath = u.CardFilePath,
cardTitle = u.CardTitle,
cardComment = allsavedcomments // Trying to render all saved coments here.
}).ToList();
return View(cardDetail);
}
Run Code Online (Sandbox Code Playgroud)
视图-
@model IEnumerable<FunRanger.Models.CardModel>
@foreach (var item in Model) {
<script type="text/javascript">
$(function () {
$('#save-comment').click(function () {
var textareavalue = $('#textarea-comment').val();
$.ajax({
url: '/Home/SaveComment/',
type: 'post',
data: '&cardComment=' + textareavalue + '&cardID=' + '@item.cardID',
success: function (data) {
$('#all-comments').append(data);
}
});
});
});
</script>
using (Html.BeginForm()) {
@Html.ValidationSummary(true)
@if (Model != null) {
<h2 class="header-wrapmain">
@item.cardTitle
</h2>
@item.cardDate.ToShortDateString()
<img src="@item.cardFilePath" />
<a href="#" class="@item.cardHashCode" rel="tooltip" data-placement="bottom" title="Filter by @item.cardHashCode">
#@item.cardHashCode</a>
}
else {
<div class="alert alert-danger">
No More items to preview
</div>
}
}
<textarea class="span12" rows="5" id="textarea-comment" style="resize: none" placeholder="Enter a comment..."></textarea>
<a href="javascript:;" id="save-comment" class="btn-primary btn">Save comment</a>
<ol>
<li>
@item.cardComment
</li>
</ol>
}
Run Code Online (Sandbox Code Playgroud)
如何List
在此处将结果插入列中.
如何使用以上查询显示所有已保存的评论?
谢谢你的帮助.
我用外键关系船稍微翻新你的代码.这将节省您对数据库使用两个不同的查询(就像您现在正在做的那样).
所以如果你的数据库模型看起来像这样 -
那么你应该以这种方式在你的代码中有一个viewmodel -
public class ImageViewModel
{
public string ImageId { get; set; }
public string ImageUrl { get; set; }
public List<string> Comments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
你的控制器动作将返回所有结果应该像这样 -
public class ListController : Controller
{
public ActionResult Index()
{
ImageViewModel model;
using (SampleEntities entities = new SampleEntities())
{
model = (from p in entities.Images
where p.ImageId == "1"
select new ImageViewModel()
{
ImageId = p.ImageId,
ImageUrl = p.ImageUrl,
Comments = p.ImageComments.Select(pa => pa.Comment).ToList()
}).FirstOrDefault();
}
return View(model);
}
}
Run Code Online (Sandbox Code Playgroud)
最后,将显示所有图像结果的视图 -
@model MVC.Controllers.ImageViewModel
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<div>
<h4>ImageViewModel</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.ImageId)
</dt>
<dd>
@Html.DisplayFor(model => model.ImageId)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ImageUrl)
</dt>
<dd>
@Html.DisplayFor(model => model.ImageUrl)
</dd>
<br/>
@foreach (var item in Model.Comments)
{
@item <br/>
}
</dl>
</div>
Run Code Online (Sandbox Code Playgroud)
产出将是 -
归档时间: |
|
查看次数: |
2367 次 |
最近记录: |