Я пытаюсь проверить форму.По какой-то причине, когда я иду, чтобы отправить форму, проверка формы говорит: «Поле ID обязательно».Однако, несмотря на это, у меня есть вход HiddenFor, который должен позаботиться об этом ...
Вот мой взгляд UserReportForm.cshtml (сокращен для удобства чтения):
@model BugTracker.ViewModels.UserReportViewModel
@{
ViewBag.Title = "Issue Form";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Report Bug/Request Change</h1>
@Html.ValidationSummary(false, "Please fix the following errors.")
@using (Html.BeginForm("Save", "Report", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="form-group">
<label>Are you reporting a bug, or requesting a change to a page?</label>
@Html.DropDownListFor(m => m.Report.RequestTypeID, new SelectList(Model.RequestType, "ID", "RequestBC"), "Select Issue", new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Report.RequestTypeID)
</div>
<div class="form-group">
<label>Name of Issue</label>
@Html.TextBoxFor(m => m.Report.Name, new { @class = "form-control"})
@Html.ValidationMessageFor(m => m.Report.Name)
</div>
<div class="form-group">
<label>Detailed Description of Issue</label>
@Html.TextAreaFor(m => m.Report.Description, new { @class = "form-control", @rows = "10"})
@Html.ValidationMessageFor(m => m.Report.Description)
</div>
@Html.HiddenFor(m => m.Report.ID)
<button type="submit" class="btn btn-primary">Save</button>
}
А вот модель представления UserReportViewModel.c :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using BugTracker.Models;
using System.Web.Mvc;
namespace BugTracker.ViewModels
{
public class UserReportViewModel
{
public Report Report { get; set; }
public IEnumerable<RequestType> RequestType { get; set; }
}
}
И модель Report.cs :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace BugTracker.Models
{
public class Report
{
//For User
public int ID { get; set; }
[Required]
public String Name { get; set; }
[Required]
public String Description { get; set; }
public RequestType RequestType { get; set; }
[Display (Name="Request Type")]
public byte RequestTypeID { get; set; }
}
}
До того, как я добавил проверку, у этих форм не было проблем с получением идентификатора в базе данных (увеличивается на 1 каждый раз).Почему эта жалоба на удостоверение личности, и что я могу сделать, чтобы не сказать, что это необходимо?
Редактировать: я не думаю, что это имеет какое-то отношение к этому, но после дальнейшего рассмотрения, я думаю,Мой контроллер может вызывать проблему:
Новая форма
public ActionResult UserReportForm()
{
var requestType = _context.RequestType.ToList();
var viewModel = new UserReportViewModel
{
RequestType = requestType,
};
return View(viewModel);
}
Сохранить форму
[HttpPost]
public ActionResult Save(UserReportViewModel viewModel)
{
if (!ModelState.IsValid)
{
var viewM = new UserReportViewModel
{
RequestType = _context.RequestType.ToList(),
};
return View("UserReportForm", viewM);
}
if (viewModel.Report.ID == 0)
{
_context.Reports.Add(viewModel.Report);
}
else
{
var reportInDb = _context.Reports.Single(c => c.ID == viewModel.Report.ID);
reportInDb.Name = viewModel.Report.Name;
reportInDb.Description = viewModel.Report.Description;
reportInDb.RequestTypeID = viewModel.Report.RequestTypeID;
}
_context.SaveChanges();
return RedirectToAction("Report", "Report", new { stat = 1 });
}