为什么AJAX调用Controller Action仅发送单个值?

时间:2019-06-25 15:11:06

标签: c# jquery asp.net-mvc

我正在尝试使用jQuery的AJAX方法将两个参数发送到我的控制器动作。但是,控制器正在显示与第二个参数重复的第一个参数的值。为什么会这样呢?

AJAX呼叫:

$('#btnSendTestEmail').click(function () {
            var dataObject = JSON.stringify({
                TestEmail: 'TestEmailAddress',
                NotificationEmail: 'NotificationAddresss'
            });
            $.ajax({
                url: '/SystemVariables/SendTestEmail',
                type: 'POST',
                async: false,
                dataType: 'json',
                contentType: 'application/json',
                processData: false,
                data: dataObject,
                success: function (response) { },
                error: function (response) { }
            }); 
        });

控制器操作:

[HttpPost]
public ActionResult SendTestEmail(string TestEmail, string NotificationEmail)
{
    string emailAddress = String.IsNullOrEmpty(TestEmail) ? SysNotificationEmail : TestEmail;
      ...
     return View();
}

上面的代码将控制器的两个参数(即TestEmail和NotificationEmail)的值显示为“ TestEmailAddress”

4 个答案:

答案 0 :(得分:1)

创建一个模型,以便绑定一些东西:

public class EmailModel
{
    public string TestEmail { get; set; }
    public string NotificationEmail { get; set; }
}

然后在控制器中接受模型,然后它将知道要绑定到的结构:

    [HttpPost]
    public ActionResult SendTestEmail(EmailModel model)
    {
        string emailAddress = model.TestEmail;
        string test = model.NotificationEmail;
        return View();
    }

答案 1 :(得分:1)

在ASP.NET MVC中将数据发布到操作时,您只需要将一个模型bind包含在操作中。 这是DefaultModelBinder的默认行为。

您需要使用这些属性创建一个类,并在操作中仅保留一个参数。

public ActionResult SendTestEmail(YourModel model)

答案 2 :(得分:0)

请尝试以下代码:

$(document).on('click', '#btnSendTestEmail', function(e){
  e.preventDefault();
  $.post('/SystemVariables/SendTestEmail', 
      {
        TestEmail: 'TestEmailAddress',
        NotificationEmail: 'NotificationAddresss'
      })
   .done(function(response){
      console.log(response);

    })
   .fail(function(xhr, exception){
      console.log(response);

    })

})

答案 3 :(得分:0)

您是否尝试过不使用json对象发送数据?会是这样的:

 $('#btnSendTestEmail').click(function () {
        $.ajax({
            url: '/SystemVariables/SendTestEmail',
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json',
            data: {'TestEmail': "TestEmailAddres", 'NotificationEmail': "NotificationAdress"},
            success: function (response) { },
            error: function (response) { }
        }); 
    });