ASP.NET MVC с DotNetNuke Как избежать повторной отправки формы при обновлении? - PullRequest
0 голосов
/ 26 марта 2019

Я относительно новичок в ASP.NET MVC.Можете ли вы дать некоторые рекомендации о том, как запретить странице Refresh отправлять форму и, таким образом, вводить другую запись в БД?

Я пытался предотвратить это, включив скрытый ввод в форму и ТОЛЬКО отправить на кнопкунажатие и затем проверка в контроллере, было ли передано значение от нажатой кнопки (значение hiddenFormSubmit), но оно не работает.

При обновлении все еще новая запись вводится в БД.Я хотел бы знать, как правильно решить эту проблему.

В контроллере:

public ActionResult Index(string id = "0") // id taken from url
    {
        ViewModelVM viewModelVM = new ViewModelVM();
        DbManager dbManager = new DbManager();

            // if request is "option" 
            if (Request["optionSelector"].Equals("option") && 
                 Request["hiddenFormSubmit"].Equals("ButtonPressed"))
            {

                DbRecord recordToEnterInDb = new DbRecord();


                // create the object to insert into db
                recordToEnterInDb.field1 = value1;
                recordToEnterInDb.field2 = value2;
                (...)

                bool recordCreatedSuccessfully = 
                       dbManager.InsertRecordInDB(recordToEnterInDb);

                if (recordCreatedSuccessfully)
                {
                    viewModelVM.ViewModelList.Add(recordToEnterInDb);                     
                }
            } 

        return View(viewModelVM);
    }

В представлении:

<form method="post" id="MyForm">
        <input type="hidden" value="" name="hiddenFormSubmit" 
           id="hiddenFormSubmit "/>

         <select id="optionSelector" name="optionSelector">
         (...)
         </select>

         <div class="col-xs-12 text-center">
            <button class="btn btn-primary" type="button" 
               id="btnSubmitForm">Submit Form</button>
        </div>
</form>


 <script>
        $(function () {   
            $('#btnSubmitForm').on("click", function () {        
                var isValid = false;
                var hiddenField = 
                    $('input[name="hiddenFormSubmit"]:hidden');

                hiddenField.val("NotPressed");

                var optionSelector = $('#optionSelector').val();

                if (optionSelector != null) {              
                    hiddenField.val("ButtonPressed");
                    isValid = true;
                }


                if (isValid) {
                    $('#MyForm').submit();
                }

            });
        });
  </script>
...