Ajax вызов контроллера для отправки формы таблицы html объектов из вида - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь отправить сложный объект из представления в контроллер. Этот объект состоит из объектов из таблицы html. Когда я вызываю контроллер с помощью вызова AJAX, список объекта всегда равен нулю. Я не знаю, что не так, потому что я проверил другой код на inte rnet, и я не вижу никакой разницы, но что-то должно быть. Заранее спасибо.

Модель

public class Parameter
{
    public string Name { get; set; }
    public string ControlType { get; set; }
    public string ToolTip { get; set; }
    public List<string> CheckedControl { get; set; }

    public int GroupID { get; set; }
    public int CtrIndex { get; set; }
    public List<string> DdItems { get; set; }
    public List<string> LangList { get; set; }
    public List<string> DdMulti { get; set; }

}

Javascript и ajax

    function ajaxSubmit() {
        var table_parameters = [[],[]];
        table_parameters = getSchemaTableData();
        var projectName = document.getElementById('txtProjectName').value;
        var projectID = document.getElementById('txtProjectID').value;


        jQuery.ajax({
            type: "POST",
            url: "@Url.Action("ControlsCreation", "Projects")",
            dataType: "json",
        contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ Parameters: table_parameters, ProjectName: projectName,   ProjectID: projectID }),

            success: function (data) { alert(data); },

        failure: function (errMsg) {
                            alert(errMsg);
                        }
                    });

    }

и контроллер

   public JsonResult ControlsCreation(List<Models.Parameter> Parameters, string ProjectName, string ProjectID)
    {
        if (Session["UserID"] == null) return Json("Home/Index");
        string userID = Session["UserID"] as string;


        var mngService = new DBManager(ConfigurationManager.ConnectionStrings["Bugmania2019"].ConnectionString);
        DBLogic dbAccess = new DBLogic(mngService);

        ViewModels.ParametersTable viewModel = new ViewModels.ParametersTable()
        {
            ParametersCollection = Parameters,
            ProjectName = ProjectName,
            ProjectID = ProjectID
        };

        dbAccess.UpdateControls(viewModel);

        return Json("Success!");
    }

У меня есть модифицировал контроллер, вид и модель. Буду признателен за любую помощь. спасибо

1 Ответ

0 голосов
/ 02 апреля 2020

Вы можете использовать этот альтернативный способ отправки вашего запроса через AJAX на Controller метод:

AJAX вызов:

function ajaxSubmit() {
    var table_parameters = [[],[]];
    table_parameters = getSchemaTableData();
    var projectName = document.getElementById('txtProjectName').value;
    var projectID = document.getElementById('txtProjectID').value;

    var json = {
       table_parameters : table_parameters,
       projectName : projectName,
       projectID : projectID
    };

    jQuery.ajax({
        type: "POST",
        url: "@Url.Action("ControlsCreation", "Projects")",
        dataType: "json",
        data: {"json": JSON.stringify(json)},
        success: function (data) { alert(data); }
        ,
        failure: function (errMsg) {
            alert(errMsg);
        }
    });

}

И ваш Controller метод будет выглядеть как:

using System.Web.Script.Serialization;

[HttpPost]
public JsonResult ControlsCreation(string json)
{
  var serializer = new JavaScriptSerializer();
  dynamic jsondata = serializer.Deserialize(json, typeof(object));

  //Get your variables here from AJAX call
  var table_parameters = jsondata["table_parameters"];
  var projectName = jsondata["projectName"];
  var projectID = jsondata["projectID"];

        if (Session["UserID"] == null) return Json("Home/Index");
        string userID = Session["UserID"] as string;

        var mngService = new DBManager(ConfigurationManager.ConnectionStrings["Bugmania2019"].ConnectionString);
        DBLogic dbAccess = new DBLogic(mngService);

        ViewModels.ParametersTable viewModel = new ViewModels.ParametersTable()
        {
            ParametersCollection = Parameters,
            ProjectName = ProjectName,
            ProjectID = ProjectID
        };

        dbAccess.UpdateControls(viewModel);

        return Json("Success!");
}
...