Невозможно отобразить страницу «создать» и «редактировать», так как она возвращает ошибку 500 в среде MVC .NET - PullRequest
0 голосов
/ 27 мая 2019

Я собираюсь разработать приложение ASP.NET MVC с использованием шаблона AdminLTE.Для операции CRUD я использовал новый элемент scaffolded, используя create «MVC 5 Controller с представлениями, используя Entity Framework».Редактирование и удаление работает просто отлично, но операции «создать» и «редактировать» не сработали, так как после запуска этих методов появляется ошибка 500.

Это код для моего контроллера:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using System.Net;
using System.Web;
using System.Web.Mvc;
using test2.Models;

namespace test2.Views
{
    public class CasesController : Controller
    {
        private eLawDBModel db = new eLawDBModel();

        // GET: Cases
        public async Task<ActionResult> Index()
        {
            return View(await db.Cases.ToListAsync());
        }

        // GET: Cases/Details/5
        public async Task<ActionResult> Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Case @case = await db.Cases.FindAsync(id);

            if (@case == null)
            {
                return HttpNotFound();
            }

            return View(@case);
        }

        // GET: Cases/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: Cases/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see https://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Create([Bind(Include = "caseID,caseName")] Case @case)
        {
            if (ModelState.IsValid)
            {
                db.Cases.Add(@case);
                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }

            return View(@case);
        }

        // GET: Cases/Edit/5
        public async Task<ActionResult> Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            Case @case = await db.Cases.FindAsync(id);

            if (@case == null)
            {
                return HttpNotFound();
            }

            return View(@case);
        }

        // POST: Cases/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see https://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Edit([Bind(Include = "caseID,caseName")] Case @case)
        {
            if (ModelState.IsValid)
            {
                db.Entry(@case).State = EntityState.Modified;
                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }
            return View(@case);
        }

        // GET: Cases/Delete/5
        public async Task<ActionResult> Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            Case @case = await db.Cases.FindAsync(id);

            if (@case == null)
            {
                return HttpNotFound();
            }

            return View(@case);
        }

        // POST: Cases/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> DeleteConfirmed(int id)
        {
            Case @case = await db.Cases.FindAsync(id);
            db.Cases.Remove(@case);
            await db.SaveChangesAsync();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}

Это разметка вида операции создания:

@model test2.Models.Case

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>


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

    <div class="form-horizontal">
        <h4>Case</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.caseName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.caseName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.caseName, "", 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-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

, и это разметка вида для операции редактирования:

@model test2.Models.Case

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>


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

    <div class="form-horizontal">
        <h4>Case</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.caseID)

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

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

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

На странице отображается эта ошибка после запускаоперация создания:

[ОШИБКА 500]
Упс!Что-то пошло не так.
Произошла ошибка при обработке вашего запроса.Пожалуйста, попробуйте еще раз.
Если проблема не устранена, обратитесь в службу поддержки.

Сервер, который я сейчас использую, - это IIS Windows версии 10.0.

1 Ответ

0 голосов
/ 27 мая 2019

Как вы знаете, иногда [ValidateAntiForgeryToken] создает проблему с совместимостью браузера, поэтому сначала удалите тег [ValidateAntiForgeryToken] из контроллера и также удалите @ Html.AntiForgeryToken () из представления.

...