Почему AJAX вызывает Controller Action, отправляя только одно значение? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь отправить два параметра в действие моего контроллера, используя метод jJuery AJAX. Но контроллер показывает значение для первого параметра, дублированного на второй параметр. Почему это происходит?

AJAX Call:

$('#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();
}

Приведенный выше код показывает значения как «TestEmailAddress» для обоих параметров контроллера, т.е. TestEmail & NotificationEmail

Ответы [ 4 ]

1 голос
/ 25 июня 2019

Создайте модель, чтобы было с чем связать:

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 голос
/ 25 июня 2019

Когда вы публикуете данные для действия в ASP.NET MVC, вам нужно иметь только одну модель для bind в действии.Это поведение по умолчанию DefaultModelBinder .

Вам необходимо создать класс с этими свойствами и оставить в действии только один параметр.

public ActionResult SendTestEmail(YourModel model)
0 голосов
/ 25 июня 2019

Вы пытались не использовать объект 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) { }
        }); 
    });
0 голосов
/ 25 июня 2019

Пожалуйста, попробуйте код ниже:

$(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);

    })

})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...