Saad Hamani Ответов: 0

Проверка и отправка веб-страницы, состоящей из динамических вкладок, содержащих каждую из них форму (отправка набора вложенных форм одним щелчком мыши)


Я работаю над проектом с ASP.NET MVC 5 (C #), AngularJS 1.6, HTML5, Bootstrap 3.3 и SQL Server 2014. Я столкнулся с проблемой проверки и отправки веб-страницы, состоящей из динамических вкладок, содержащих каждую из них форму. Я хочу проверить правильность каждой формы (содержащейся на вкладке), а затем отправить все формы одним нажатием кнопки "Отправить" для сохранения в базе данных SQL Server.

Как я могу это сделать? (У меня есть идея поместить набор форм в список форм, но я не знаю, как это сделать (я видел, что могу использовать ng-форму, содержащуюся в форме, и использовать REST Web API).

Я приведу вам пример, чтобы полностью понять мою потребность и помочь мне, если это возможно, рассказав мне о типах переменных и шагах, которые нужно выполнить для front-end и back-end.

SupportDemande.cshtml по :
<script src="~/Scripts/tether.min.js"></script>
<script src="~/Scripts/jquery-3.1.1.js" type="text/javascript"></script>
<script src="~/Scripts/angular.js"></script>
<script src="~/Scripts/angular.min.js"></script>
<script src="~/Scripts/angular-animate.min.js"></script>
<script src="~/Scripts/angular-route.js"></script>
<script src="~/Scripts/angular-aria.min.js"></script>
<script src="~/Scripts/angular-messages.min.js"></script>
<script src="~/ScriptsJS/SupportDemande/SupportDemandeApp.js"></script>

<div ng-app="supportDemandeApp" ng-controller="supportDemandeCtrl" class="supportDemande" role="tabpanel" ng-cloak>
    <ul class="nav nav-tabs" role="tablist" tabindex="selectedIndex">
        <li class="active" role="presentation" ng-repeat="revue in revues" ng-click="selectRevue($index)" ng-class="{'active':selectedRevue == $index}">
            <a data-target="#revue" aria-controls="home" role="tab" data-toggle="revue">
                Revue {{revue.id}}
                <span ng-click="supprimerRevue($index)" ng-if="$index > 0" class="glyphicon glyphicon-remove"></span>
            </a>
        </li>
    </ul>
	
	<form class="tab-content" id="revueListe" name="revueListe" ng-model="revueListe" method="post" ng-submit="submitSupportDemande()" novalidate="">
        <div class="tab-pane fade in active" role="tabpanel" id="revue" ng-model="revue">
			<revue-tab ng-model="revueTab"></revue-tab>
		</div>
    </form>
	
	<br /> <br /> <br />
    <div class="form-group" style="text-align:center">
        <div class="col-lg-10 col-lg-offset-2">
            <button type="reset" class="btn btn-default" id="annuler" name="annuler">Cancel</button>
            <button type="submit" class="btn btn-primary" id="envoyer" name="envoyer" style="margin-left:10px" ng-disabled="!validSupportDemande()">Submit</button>
        </div>
    </div>
</div>


RevueTabTemplate.html :
<ng-form class="form-horizontal" id="revueForm" name="revueForm" ng-model="revueForm" method="post" ng-submit="submitRevueForm()" novalidate="">
    <br />
    <fieldset>
        <legend>Données de la revue</legend>

        <div style="padding:25px;margin-top:-30px;margin-bottom:-10px">
            <div class="form-group">
                <label for="nomDemandeur" class="col-lg-2 control-label">First Name</label>
                <div class="col-lg-10">
                    <input type="text" class="form-control" id="nomDemandeur" name="nomDemandeur" ng-model="nomDemandeur" required />
					<div class="help-block col-lg-9" ng-messages="revueForm.nomDemandeur.$error" ng-if="revueForm.nomDemandeur.$touched">
                        <span ng-message="required">Required</span>
                    </div>
                </div>
            </div>

            <div class="form-group">
                <label for="prenomDemandeur" class="col-lg-2 control-label">Last Name</label>
                <div class="col-lg-10">
                    <input type="text" class="form-control" id="prenomDemandeur" name="prenomDemandeur" ng-model="prenomDemandeur" required />
					<div class="help-block col-lg-9" ng-messages="revueForm.nomDemandeur.$error" ng-if="revueForm.nomDemandeur.$touched">
                        <span ng-message="required">Required</span>
                    </div>
                </div>
            </div>

            <div class="form-group" ng-class="{ 'has-error': revueForm.emailDemandeur.$touched && revueForm.emailDemandeur.$invalid }">
                <label for="emailDemandeur" class="col-lg-2 control-label">Email<span style="color:red"> *</span></label>
                <div class="col-lg-10">
                    <input type="email" class="form-control" id="emailDemandeur" name="emailDemandeur" ng-model="emailDemandeur" required />
                    <div class="help-block col-lg-9" ng-messages="revueForm.emailDemandeur.$error" ng-if="revueForm.emailDemandeur.$touched">
                        <span ng-message="required">Required</span>
                        <span ng-message="email">Invalid Email</span>
                    </div>
                </div>
            </div>
		</div>
	</fieldset>
	<br />
    <div class="col-lg-10 col-lg-offset-2">
        <button class="btn btn-info" ng-click="ajouterRevue()" ng-disabled="!validSupportDemande()">Add a revue</button>
        <button class="remove btn btn-danger" style="margin-left:10px" ng-click="supprimerRevue($index)" ng-disabled="$index > 0"><!--ng-if="$last"-->Delete this revue</button>
    </div>
</ng-form>


SupportDemandeApp.js :
///<reference path="../Scripts/angular.min.js" />
///<reference path="../Scripts/angular-route.min.js" />

var supportDemandeApp = angular.module('supportDemandeApp', ['ngMessages']);

supportDemandeApp.directive('revueTab',
    function () {
        return {
            restrict: 'EA',
            templateUrl: '/ScriptsJS/SupportDemande/RevueTabTemplate.html'
        }
    }
);

supportDemandeApp.controller('supportDemandeCtrl', ['$scope', '$filter', supportDemandeCtrl]);

function supportDemandeCtrl($scope, $filter) {
	
	//I'm using this function because in my actual form, I can not have all required fields filled in because I process several validation rules, and I use ng-if and ng-show to make appear or disappear some required fields. In brief, I use it to force validation of the form so that all the fields are valid (even if they are not filled).
	$scope.validRevueForm = function () {
        if ($scope.nomDemandeur && 
            $scope.prenomDemandeur &&
            $scope.emailDemandeur) {
                $scope.revueForm.$setValidity('required', true);
                return true;
        }
        else {
            $scope.revueForm.$setValidity('required', false);
            return false;
        }
        
    };

    //Submit Revue Form
    $scope.submitRevueForm = function () {
        if ($scope.validRevueForm() === true) {
            return true;
        }
    };

    //Submit List Revues Form
    $scope.submitSupportDemande = function () {
        if ($scope.submitRevueForm() === true) {
            alert('Support de demande envoyé avec succès');
            return true;
        }
    };
	
	
	//Tabs 'Revues'
    $scope.revues = [{
        id: 1,
        content: $scope.revue
    }]

    $scope.counter = 1;
    /** Function to add a new tab **/
    $scope.ajouterRevue = function () {
        $scope.counter++;
        $scope.revues.push({ id: $scope.counter, content: $scope.revue });
        $scope.selectedTab = $scope.revues.length - 1; //set the newly added tab active. 
    }

    /** Function to delete a tab **/
    $scope.supprimerRevue = function (index) {
        if ($scope.revues.length > 0) {
            $scope.revues.splice(index, 1); //remove the object from the array based on index
            $scope.counter--;
        }
    }

    $scope.selectedTab = 1; //set selected tab to the 1st by default.

    /** Function to set selectedTab **/
    $scope.selectTab = function (index) {
        $scope.selectedTab = index;
    }
}


SupportDemande.в CS :
public class SupportDemande
{
    public List<Revue> GetData()
    {
        try
        {
            List<Revue> revues = new List<Revue>();
            for (int i = 0; i < 1; i++)
            {
                Revue revue = new Revue();
                revue.RevueID = i;
                //revue.RevueContent = "informations sur la revue " + i;
                revues.Add(revue);
            }
            return revues;
        }
        catch (Exception)
        {
            throw new NotImplementedException();
        }
    }

}


Revue. cs :
public class Revue
{
    public int RevueID { get; set; }
    public String Nom { get; set; }
    public String Prenom { get; set; }
    public String Email { get; set; }
}


SupportController. cs :
[Authorize]
[HandleError]
[RoutePrefix("Supports")]
public class SupportsController : Controller
{
    public ActionResult SupportDemande()
    {
        return View("SupportDemande");
    }

    //GET: /Supports/
    public JsonResult RevueData()
    {
        BEMF_REVUES.Models.SupportDemande supportDemande = new SupportDemande();
        var myList = supportDemande.GetData();
        return Json(myList, JsonRequestBehavior.AllowGet);
    }


Что я уже пробовал:

ng-форма в форме и шаблоне html

0 Ответов