【问题标题】:mvc and ajax - not hitting models propertiesmvc 和 ajax - 不命中模型属性
【发布时间】:2012-06-26 20:42:52
【问题描述】:

我正在尝试在我的 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; }
    }

}

【问题讨论】:

  • 什么浏览器?对于 IE,这通常是由缓存问题引起的。尝试添加 cache: false 到您的 Ajax 请求,然后重试。
  • 也可以尝试在后台运行 Fiddler 并查看 URL 是否被命中。
  • 在 IE/Firefox/Chrome 中不起作用。已经尝试将缓存设置为 false。同样的问题。
  • URL 未命中。它只有在我使用时才会命中: data: $('form').serialize() 但我想在提交的内容中有所选择,所以我不能使用它。

标签: javascript c# jquery ajax asp.net-mvc


【解决方案1】:

您似乎没有取消表单的默认事件。我建议您订阅表单的 .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;
    });
});

【讨论】:

    【解决方案2】:

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

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

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

    Send data with jquery to an MVC controller

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

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

    How does the MVC3 Controller retrieve HTTPPOST params?

    【讨论】:

    • 只是一个快速的提示...JQuery .live() 方法已被弃用。如果您需要使用它 - 请改用 .on()
    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多