JQuery.Post()在控制器MVC 3中调用一个动作结果

时间:2011-11-02 13:57:29

标签: jquery asp.net-mvc-3 post partial actionresult

我环顾四周,无法找到问题的答案。 jquery和mvc3的新手如果很明显就很抱歉。

$.post('@Url.Action("EditPost", "Task")', { "fc": document.getElementById("#myForm")});

我正在尝试将更改保存到行中并刷新部分视图而不回发整个页面。

使用上面的代码行,我试图在控制器中执行一个动作结果,但它似乎在寻找一个名为EditPost的视图而不是任务控制器中一个名为EditPost的方法,这就是我想要做的。有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:4)

尝试使用这样:

$.post('@Url.Action("EditPost", "Task")', $('#myForm').serialize(), function(data){
    $('#form').children().remove().append(data);
}, 'html');

您需要指定它返回的dataType是html(部分视图)而document.getElementById("#myForm")不能为您提供任何内容,因为除非使用jquery选择器,否则不使用#即使你删除#,你也会获得表单元素,而不是它的内容。因此,您使用$('#myForm').serialize()将所有内容序列化为帖子或获取数据。

答案 1 :(得分:2)

  

document.getElementById(“#myForm”)????

如果您想使用AJAX提交整个表单:

$('#myForm').submit(function() {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function(result) {
            alert('success');            }
    });
    return false;
});

这假设您的控制器操作从表单的输入字段的值中获取包含要绑定的多个属性的整个视图模型:

public ActionResult EditPost(MyViewModel model) 
{
    ...
}

或只是某些输入的值:

var url = '@Url.Action("EditPost", "Task")';
var fc = $('#fc').val();
$.post(url, { fc: fc }, function(result) {
    alert('success');
});

这假设您的控制器操作以fc为参数:

public ActionResult EditPost(string fc) 
{
    ...
}