0

我正在尝试在我的 beginform 中自动发布输入,但它们的值没有到达模型或控制器。它们保持为空(断点从未命中。)可能导致这种情况的原因是什么?

 @model project.Models.data

JAVASCRIPT

   function send()
        {
             $.ajax({
                        type: 'POST',
                        url: this.action,
                        data: {'data1': $('#data1').val(), 
                        'data2': $('#data2').val() },
                        success: function (done) {
                $('#box').html(done.output);
            });
        }

形式

@using (Html.BeginForm())
{
<input id="data1" value="0" name="data1" onclick="send();" >
<input id="data2" value="0" name="data2" onclick="send();" >

}

模型

namespace projects.Models
{
  public class data
    {
  public int data1{ get; set; }
  public int data2 { get; set; }
    }

}
4

2 回答 2

2

您似乎没有取消表单的默认事件。我建议您订阅表单的 .submit 事件并停止混合标记和 javascript:

@using (Html.BeginForm())
{
    <input id="data1" value="0" name="data1" />
    <input id="data2" value="0" name="data2" />
}

然后在一个单独的 javascript 文件中,您可以订阅此表单的 .submit 事件:

$(function() {
    $('form').submit(function() {
        $.ajax({
            type: this.method,
            url: this.action,
            data: {
                data1: $('#data1').val(), 
                data2: $('#data2').val() 
            },
            success: function (done) {
                $('#box').html(done.output);
            }
        });

        // It is very important to return false in order to prevent the default action
        return false;
    });
});
于 2012-06-26T21:01:00.587 回答
1

对于初学者,我建议不要使用该onclick属性。使用 jQuery 的clickoron会好很多。

其次,Html.BeginForm()它不能按照您使用它的方式工作。如果您想点击控制器方法,您需要有一个提交按钮,其中包含您尝试点击的控制器方法的值。

如果您尝试使用 jQuery 异步访问方法(即使用 AJAX),那么我建议您在此处查看此帖子:

使用 jquery 将数据发送到 MVC 控制器

Html.BeginForm()如果您使用 AJAX,则无需 POST 到服务器。但是,如果您想发布并重定向到另一个操作,我会使用Html.BeginForm().

现在,如果您尝试在不使用 AJAX 的情况下 POST 到服务器,那么您需要在Html.BeginForm(). 下面的这篇文章详细介绍了注册表的工作原理,并可能适用于您的情况。

MVC3 控制器如何检索 HTTPPOST 参数?

于 2012-06-26T20:47:46.647 回答