通过AJAX提交表单并返回部分视图 - MVC2

时间:2010-12-17 22:49:22

标签: c# asp.net ajax asp.net-mvc-2

似乎有很多方法可以解决这个问题。

目前我使用如下形式制作部分视图:

<div id="container">
    <form id="some-form">
        <input id="some-text" type="text">
        <input id="some-submit" type="submit">
    </form>
</div>

然后我用JQuery劫持提交并做一个ajax帖子并用另一个局部视图替换表单:

$(function()
{
    $('#some-form').submit(function(){
          $.ajax({
               type: "POST",
               url: "/Controller/Action",
               data: {someVal: $('#some-text').val()},
               dataType: "html",
               success: function (result) {
                   $('#container').html(result);
               },
               error: function (request, status, error) {
                   alert('Oh no!');
               }
         });
    });
});

控制器就像:

    [HttpPost]
    public ActionResult SomeAction(string someVal)
    {
        //Do something with text
        return PartialView("SubmitSuccess");
    }

我的问题

有什么其他方法可以完成同样的事情,有什么利弊与我正在做的事情?

Ajax.Form有用吗?

2 个答案:

答案 0 :(得分:3)

我个人使用jquery form plugin。它会缩短您的代码。还要将action参数分配给表单,以避免在脚本中对其进行硬编码。

<div id="container">
    <% using (Html.BeginForm("action", "controller", FormMethod.Post, 
        new { id = "some-form" })) { %>
        <input id="some-text" type="text">
        <input id="some-submit" type="submit">
    <% } %>
</div>

然后将插件附加到此表单以进行AJAXify:

$(function() {
    $('#some-form').ajaxForm({
        success: function(result) { 
            $('#container').html(result);
        },
        error: function(request, status, error) {
            alert('Oh no!');
        }
    });
});

插件将使用方法参数中指定的谓词自动向操作发送AJAX请求,并序列化请求中所有输入字段的值。

答案 1 :(得分:0)

你做的方式有什么问题?我已经这样做了,它对我来说很有用。这取决于您需要如何重复使用该过程;你可以使用带有css类的DIV,然后在需要可重用性时创建一个JQuery插件或小部件。

HTH。