【发布时间】:2014-08-01 08:14:42
【问题描述】:
我一直在寻找有关如何在 MVC 项目中使用 AJAX 的信息,但到目前为止它只是让我有点困惑。我相信我现在距离实现一个 Ajax ActionLink 并不会太远,它会导致数据库条目发生变化,因此这种变化会反映到视图中。但很明显,这段代码现在是错误的:
public void MarkAsRead(Models.MessageModel message)
{
using (var db = new MessengerDBEntities())
{
var dbMessage = db.Messages.FirstOrDefault(m => m.messageID == message.Id);
// Error handling
if (dbMessage == null)
{
ViewBag.ResultMessage =
"Something bad has happened with that message in the meantime. Please log out and in again.";
return;
}
dbMessage.messageRead = true;
db.SaveChanges();
return;
}
}
这是 Razor 代码:
@if (Model.Count() > 0)
{
<br /><br />
string messageClass;
foreach (var message in Model)
{
messageClass = message.Read ? "message-header" : "message-unread-header";
<div class="message-container">
<div class="@messageClass">
@if (!message.Read)
{
<text>New </text>
}
From: @message.Sender
@if(!message.Read)
{
<span class="mark-read-span">
@Ajax.ActionLink("Mark as read", "MarkAsRead", message, new AjaxOptions())
</span>
}
</div>
<div class="message-mainbody">
@message.Content
</div>
<div class="message-footer">
At: @message.Timestamp.ToShortDateString() @message.Timestamp.ToShortTimeString()
</div>
</div>
<br />
}
}
else
{
<div id="no-messages-div">You haven't got any messages yet. :(</div>
}
在视图中,我正在遍历对象集合(接收到的消息)。对于每条消息,我检查它是否已被阅读,如果没有,则会有一个链接将其倾斜到阅读状态。我还为 div 分配了一个不同的类,该类根据是否是新消息来显示消息:
@messageClass = message.Read ? "message-header" : "message-unread-header";
<div class="message-container">
<div class="@messageClass">
...
我怀疑我使用了带有错误 AjaxOptions 参数的 Ajax.ActionLink 帮助程序,但在阅读 MSDN 后我并没有更接近解决方案。 我能做错什么吗?
【问题讨论】:
-
请展示您的完整视图
-
查看时间过长,无法发表评论,已编辑问题。
-
我很早就发现了该帖子,但对我并没有太大帮助。我不能使用 UpdateTargetId 参数(可能是不同的剃须刀版本?),我不确定是否应该使用它。但是我的 MarkAsRead 方法至少是正确的吗?是否可以为此返回 void?
-
使用 ajax 选项并定义 POST 方法
标签: asp.net ajax asp.net-mvc asp.net-mvc-4