user3900603
user3900603

Reputation: 69

Sending Large data from View to Controller in MVC

I am getting table records, I need to send it to Controller so that I can send email. When I tried with following code, it's throwing error

  var emailList = '';
  $('.checkBoxClass').each(function () {
    if ($(this).is(':checked')) {

        emailList += $(this).val() + ',';
    }
});

body = 'Hi Team'
console.log('emIl ' + emailList);
var baseUrl = ".";
$.ajax({
    type: "GET",
    url: baseUrl + "/Dashboard/GetFinanceSendMail",
    data:  "{'emailList': '" + JSON.stringify(emailList) +  "', body' : '" + body + "' }",
    success: function (json) {
        alert(json);
    }
});

Error as : HTTP Error 404.15 - Not Found The request filtering module is configured to deny a request where the query string is too long.

Most likely causes: Request filtering is configured on the Web server to deny the request because the query string is too long.

I have tried to add following code, still same error

var formData = new FormData();
var objArr = [];

objArr.push({ "emIl": emailList, });

//JSON obj
formData.append('objArr', JSON.stringify(objArr))


body = 'Hi Team'
console.log('emIl ' + emailList);
var baseUrl = ".";
$.ajax({
    type: "POST",
    url: baseUrl + "/Dashboard/GetFinanceSendMail",
    processData: false,
    contentType: false,
    data: formData,

Here is Controller Code

    [HttpGet]
    public JsonResult GetFinanceSendMail(string emailList, string body)
    {
        List<string> emails = emailList.Split(',').ToList();
        // Send Email add optiona arg to the method
        _openPobl.TriggerFinanceEmail(body, emails);
        return Json(emails, JsonRequestBehavior.AllowGet);
    }

Upvotes: 0

Views: 963

Answers (1)

Serge
Serge

Reputation: 43860

fix the action, remove [get]

 
 Route[("~/Dashboard/GetFinanceSendMail")]
    public JsonResult GetFinanceSendMail(string emailList, string body)

and ajax

var emailList = '';
  $('.checkBoxClass').each(function () {
    if ($(this).is(':checked')) {

        emailList += $(this).val() + ',';
    }
});

var body = 'Hi Team';

$.ajax({
    type: "POST",
    url:  "/Dashboard/GetFinanceSendMail",
    data:  {emailList: emailList, body :  body  },
    success: function (json) {
        alert(json);
    }
});

but if you want to use post much more reliable to create a viewmodel class

public class ViewModel
{
public string EmailList {get;set;}
public string Body {get;set;}
}

action

   Route[("~/Dashboard/GetFinanceSendMail")]
   public JsonResult GetFinanceSendMail(ViewModel model)
.....

and ajax

$.ajax({
    type: "POST",
    url:  "/Dashboard/GetFinanceSendMail",
    data:  { model: {emailList: emailList, body :  body } },
    success: function (json) {
        alert(json);
    }
});

Upvotes: 1

Related Questions