Jquery 使用ASP.NET MVC,将简单表单Ajaxify化的首选方法是什么?
我正在尝试向网页添加一个简单的评论/消息框。当用户输入注释并点击submit时,我希望将此消息保存到数据库中,并将注释添加到页面上显示的列表中,而不刷新整个页面 然而,我不确定这些天最好的方法是什么。我正在使用ASP.NETMVC2。我一直在尝试阅读关于使用JQuery实现这类功能的文章,但是我在全面了解正确的方法时遇到了一些问题,这些方法也不是过时的(例如,它使用的是MVC 1的预览版本或JQuery的旧版本) 我可以找到不同片段的片段,而不知道它们是如何协同工作的,或者这些信息似乎已经过时,不再有效 有人能为我指出这样的事情的正确方向吗 理想情况下,我正在寻找JQuery代码的简单示例、HTML表单中与普通post方法的任何关键差异的片段,以及MVC控制器中使用的基本方法。我需要一些东西来帮助打开理解的灯泡。:)Jquery 使用ASP.NET MVC,将简单表单Ajaxify化的首选方法是什么?,jquery,asp.net-mvc,ajax,asp.net-mvc-2,Jquery,Asp.net Mvc,Ajax,Asp.net Mvc 2,我正在尝试向网页添加一个简单的评论/消息框。当用户输入注释并点击submit时,我希望将此消息保存到数据库中,并将注释添加到页面上显示的列表中,而不刷新整个页面 然而,我不确定这些天最好的方法是什么。我正在使用ASP.NETMVC2。我一直在尝试阅读关于使用JQuery实现这类功能的文章,但是我在全面了解正确的方法时遇到了一些问题,这些方法也不是过时的(例如,它使用的是MVC 1的预览版本或JQuery的旧版本) 我可以找到不同片段的片段,而不知道它们是如何协同工作的,或者这些信息似乎已经过时,
任何帮助都将不胜感激 有一个helper方法,允许您创建支持Ajax的表单。本文将帮助您开始:
您应该查看插件。您可以使用ajax将注释发布到控制器,保留注释并返回bool w/JSON。在jquery中,定义一个成功处理程序(参见examples选项卡),并在页面底部呈现注释。如果您希望对如何呈现注释(而不使JS混乱)进行一些格式控制,您还可以查看javascript模板(这是Microsoft建议的实现)。我通常会这样做
<form action="/controller/action" method="post" id="formID">
</form>
$("#formID").submit(function(){
var form = $(this);
$.post(form.attr("href"), form.serialize(), function(data){/*manipulate page*/}, "text")
return false;
});
$(“#formID”).submit(函数(){
变量形式=$(此);
$.post(form.attr(“href”)、form.serialize()、函数(数据){/*操纵页面*/}、“文本”)
返回false;
});
MVC控制器与不使用Ajax时的情况类似,只是您可能会返回一个不同的视图——一个不包含整页标记的视图,具体取决于您希望从服务器获取的数据。您可能根本不需要返回任何数据——您的“操纵页面”代码可能已经具有所需的所有信息。对于您的评论系统,您可以尝试以下机制: 如果你有这样的模型
public class Message
{
public int Id {get;set;}
public string Text {get;set;}
public Comment[] Comments {get;set;}
}
public class Comment
{
public int Id {get;set;}
public string Text {get;set;}
}
在您的messageview中
Message:
<%: Model.Text%>
<div id="divComments">
<% Html.RenderPartial("Comment",Model.Comments); %>
</div>
<% using(Ajax.BeginForm("AddComment", new{id=Model.Id}, new AjaxOptions{HttpMethod="POST",UpdatetargetId ="divComments" }))
{ %>
<%: Html.TextArea("comment") %>
<input type="submit" value="Add comment" />
<% } %>
谢谢这对我来说很有效。非常简单和干净。href不是表单的正确属性吗?你不应该寻找动作属性吗?
<% foreach(var comment in Model) { %>
<li><%: comment.Text %>
<%}
public MessageController: Controller
{
public ActionResult Message(int id)
{
using(MessageRepository messageRepo = new MessageRepository())
{
return View(messageRepo.SelectById(id));
}
}
public ActionResult AddComment([Bind(Prefix="id")]int messageId, string comment)
{
using(MessageRepository messageRepo = new MessageRepository())
{
messageRepo.InsertComment(messageId,comment);
if(this.Request.IsAjaxRequest())
return View(messageRepo.SelectById(messageId).Comments));
return RedirectToAction("Message", new{id=messageId});
}
}
}