Значение формы отправлено в контроллер с нулевым значением jquery - PullRequest
0 голосов
/ 22 апреля 2020

В проекте Asp. NET MVC на моей странице cs html есть форма. Я хочу отправить значения формы на контроллер с пост-адаптером jquery. Я использую функцию .serilize () для получения значений формы, и когда я предупреждаю сериализованные значения, я могу получить их в виде строки, однако, когда я отправляю их в контроллер, они отправляют как нулевые. Вот моя страница cs html:

EditPage.cs html

@model Models.PROJECTS

@using (Html.BeginForm(null,null,FormMethod.Post,new {id="EditForm"}))
{
    @*Html.AntiForgeryToken()*@

    <div class="form-horizontal">

        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.PROJE_NO)

        <div class="form-group">
            @Html.LabelFor(model => model.PROJECTNAME, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.PROJECTNAME, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.PROJECTNAME, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.PROJECTCODE, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.PROJECTCODE, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.PROJECTCODE, "", new { @class = "text-danger" })
            </div>
        </div>
        .
        .
        .



        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <i class="fa fa-save fa-lg" id="saveBtn" style="cursor:pointer;color:green" title="Edit Project"></i>&nbsp;

            </div>
        </div>
    </div>
     }
    @section scripts
     {

    <script language="javascript">

    $(document).ready(function() {


            $(document).on("click", "#saveBtn", function () {


                var formData = $('#EditForm').serialize();

                alert(JSON.stringify(formData));

                $.post('@Url.Action("EditProject", "Home")',
                    {
                        project: JSON.stringify(formData)

                    }).done(function(data) {

                    if (data.success) {

                        alertify.success(data.message);

                    } else {

                        alertify.error(data.message);
                    }
                }).fail(function() {
                    alertify.error('Error while editing project');
                });

            });
        });
   </script>

Вот HomeController:

 [HttpPost]
        public ActionResult EditProject(PROJECTS project)
        {

            try
            {
                using (dbContext = new ProjectsDbContext())
                {
                    dbContext.Entry(project).State = EntityState.Modified;
                    dbContext.SaveChanges();
                    return Json(new { success = true, message = "Project Info is Updated" });
                }
            }
            catch (Exception e)
            {
                return Json(new { success = false, message = "Project Info Cannot be Updated" });
            }
        }

Для действия EditProject Параметр проекта имеет значение NULL. Я не знаю, где я делаю неправильно. Любая помощь приветствуется.

1 Ответ

1 голос
/ 22 апреля 2020

После комментариев, чтобы исправить проблему, вы можете использовать два обновления:

1 - вам не нужно использовать JSON.stringify(formData), потому что когда вы используете .serialize(), он генерирует данные как QueryString, поэтому, который необходимо отправить, используя значение по умолчанию contentType: application/x-www-form-urlencoded; charset=UTF-8, а не JSON.

2 - Немного измените функцию js, заменив:

{
    project: JSON.stringify(formData)
}

По formData.
js будет:

$(document).ready(function () {
    $(document).on("click", "#saveBtn", function () {

        var formData = $('#EditForm').serialize();

        $.post('@Url.Action("EditProject", "Home")', formData)
            .done(function (data) {
                if (data.success) {

                    alertify.success(data.message);

                } else {

                    alertify.error(data.message);
                }
            }).fail(function () {
                //alertify.error('Error while editing project');
            });
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...