nyt1972 Ответов: 1

Asp.net MVC5 create не работает


Привет,

Мое создающее представление не сохраняет запись в базу данных, не знаю, в чем ошибка, bcoz его не показывает никакой ошибки, а только делает недействительным Modelstate.

Код контроллера приведен ниже:

// GET: Discounts/Create
       public ActionResult Create()
       {
           ViewBag.InstitutionID = new SelectList(db.tblInstitutes, "InstitutionID", "Institution");
           ViewBag.FeeTypeID = new SelectList(db.tblFeeTypes, "FeeTypeID", "FeeType");
           return View();
       }

       // POST: Discounts/Create
       // To protect from overposting attacks, please enable the specific properties you want to bind to, for
       // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
       [HttpPost]
       [ValidateAntiForgeryToken]
       public ActionResult Create(Discount discount)
       {
           if (ModelState.IsValid)
           {
               db.Discounts.Add(discount);
               db.SaveChanges();
               return RedirectToAction("Index");
           }
           ViewBag.InstitutionID = new SelectList(db.tblInstitutes, "InstitutionID", "Institution");
           ViewBag.FeeTypeID = new SelectList(db.tblFeeTypes, "FeeTypeID", "FeeType");
           return View(discount);
       }


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

Посмотреть можно здесь:

@model SchoolMVC.Models.Database.Discount

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Discount</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.InstitutionID, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("Institution", ViewBag.InstitutionID as SelectList, "-Select Institution-", new { @id = "InstitutionID", @class = "form-control" })
                @Html.ValidationMessageFor(model => model.InstitutionID, "", new { @class = "text-danger" })
            </div>
        </div>

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

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

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

        <div class="form-group">
            @Html.LabelFor(model => model.FeeTypeID, "FeeTypeID", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("FeeTypeID", null,"-Select FeeType-", htmlAttributes: new { @class = "form-control" })
                <Label id="ClassFee" class="text-left"> </Label>
                @Html.ValidationMessageFor(model => model.FeeTypeID, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.EnrollID, "EnrollID", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("Select Student", new SelectList(" "), new { @id = "EnrollID", @class = "form-control" })
                @Html.ValidationMessageFor(model => model.EnrollID, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            <Label class="col-md-2 text-primary">Percent: </Label>  <input type="checkbox" name="Percent" id="Percent" class="form-check-input" />
        </div>

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

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

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-success" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
<script src="~/Scripts/jquery-3.5.1.js"></script>
<script>
    $(function () {
        $("#InstitutionID").change(function () {
            $.get("/Students/GetSessions", { InstitutionID: $("#InstitutionID").val() }, function (data) {
                $("#SessionID").empty();
                $("#SessionID").append("<option>-Select Session-</option>");
                $.each(data, function (index, row) {
                    $("#SessionID").append("<option value='" + row.SessionID + "'>" + row.SessionName + "</option>");
                });
            });
        });
    });

    // Get Classes
    $(function () {
        $("#SessionID").change(function () {
            $.get("/Students/GetClasses", { SessionID: $("#SessionID").val() }, function (data) {
                $("#ClassID").empty();
                $("#ClassID").append("<option>-Select Class-</option>");
                $.each(data, function (index, row) {
                    $("#ClassID").append("<option value='" + row.ClassID + "'>" + row.ClassName + "</option>");
                });
            });
        });
    });

    $(function () {
        $("#ClassID").change(function () {
            $.get("/Discounts/GetEnrollIDs", { ClassID: $("#ClassID").val() }, function (data) {
                $("#EnrollID").empty().append("<option>-Select EnrollID-</option>");
                $.each(data, function (index, row) {
                    $("#EnrollID").append("<option value='" + row.EnrollID + "'>" + row.StudentName + "</option>");
                });
            });
        });
    });

    $(function () {
        var calculateDiscount = function () {
            var state = $('#Percent').is(":checked");
            var disc = $("#DiscountAmount").val();
            var feeamount = $('#ClassFee').text();
            var discount = state ? (disc * feeamount) / 100 : feeamount - disc;
            $('#TotalDiscount').val(discount);
        };

        $("#DiscountAmount,#Percent").change(calculateDiscount);
        calculateDiscount();
    });


    $('#ClassID,#FeeTypeID').change(function () {
        $.ajax({
            url: '@Url.Action("GetClassFee", "Discounts")',
            type: "POST",
            dataType: "JSON",
            contentType: "application/json",
            data: JSON.stringify({ ClassID: $('#ClassID').val(), FeeTypeID: $('#FeeTypeID').val() }),
            success: function (result) {
                if (result.status == 'failed') {
                    $('#ClassFeeID').empty();
                    var txt = '<Label class=text-danger>No Fee Generated!</Label>';
                    $('#ClassFee').empty().append(txt);
                }

                if (result.status == 'success') {
                    $('#ClassFeeID').empty().val(result.ClassFeeID);
                    var fee = '<Label class=text-primary>' + result.ClassFee1 + '</Label>';
                    $('#ClassFee').empty().append(fee);
                }
            }
        });
    });


</script>

1 Ответов

Рейтинг:
8

Richard Deeming

Если состояние модели недопустимо, то значения, отправленные на сервер, не проходят правила проверки, определенные в модели.

Добавьте сводку проверки в верхнюю часть формы, чтобы просмотреть список ошибок проверки:

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
    ...


nyt1972

Спасибо Ричард Диминг