Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用ASP.NET MVC,将简单表单Ajaxify化的首选方法是什么?_Jquery_Asp.net Mvc_Ajax_Asp.net Mvc 2 - Fatal编程技术网

Jquery 使用ASP.NET MVC,将简单表单Ajaxify化的首选方法是什么?

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的旧版本) 我可以找到不同片段的片段,而不知道它们是如何协同工作的,或者这些信息似乎已经过时,

我正在尝试向网页添加一个简单的评论/消息框。当用户输入注释并点击submit时,我希望将此消息保存到数据库中,并将注释添加到页面上显示的列表中,而不刷新整个页面

然而,我不确定这些天最好的方法是什么。我正在使用ASP.NETMVC2。我一直在尝试阅读关于使用JQuery实现这类功能的文章,但是我在全面了解正确的方法时遇到了一些问题,这些方法也不是过时的(例如,它使用的是MVC 1的预览版本或JQuery的旧版本)

我可以找到不同片段的片段,而不知道它们是如何协同工作的,或者这些信息似乎已经过时,不再有效

有人能为我指出这样的事情的正确方向吗

理想情况下,我正在寻找JQuery代码的简单示例、HTML表单中与普通post方法的任何关键差异的片段,以及MVC控制器中使用的基本方法。我需要一些东西来帮助打开理解的灯泡。:)


任何帮助都将不胜感激

有一个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});
        }
    }
}