1

我使用了范围验证,但这不起作用。我正在添加模型、控制器和查看代码。请帮助(我只在此代码中添加了相关字段)。

型号是:

public class TicketDetailModel : TicketModelBase
    {
        public WorkOnTicketCreateModel WorkOnTicketCreateModel { get; set; }
    }
public class TicketModelBase
    {
        [Required]
        [Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than {0}")]
        public int EstimatedTime { get; set; }
        public virtual List<WorkOnTicket> WorkOnTickets { get; set; }
    }
public class WorkOnTicketCreateModel : WorkOnTicketModelBase
    {
        [Required]
        [Display(Name = "AssignedToUser")]
        public int AssignedToUserId { get; set; }
        public IEnumerable<SelectListItem> AssignedUser { get; set; }

        [Required]
        [Display(Name = "Ticket Status")]
        public int TicketStatusId { get; set; }

        public TicketStatus TicketStatusVal { get; set; }

        public IEnumerable<SelectListItem> TicketStatus { get; set; }

    } 
public class WorkOnTicketModelBase
    {
        public int Id { get; set; }

        [Required]
        public int EstimateHours { get; set; }

        [Required]
        [Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than {0}")]
        public int WorkedHours { get; set; }

    }
Contoller:
        [HttpPost]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Details(TicketDetailModel model, IEnumerable<HttpPostedFileBase> file)
        {
            using (ITransaction transaction = this.nhSession.BeginTransaction())
            {

                var ticketObj = this.nhSession.QueryOver<Ticket>().Where(t => t.Id == model.Id).SingleOrDefault();
                var workOnTicket = new WorkOnTicket();

             workOnTicket.Ticket = ticketObj;
                    workOnTicket.WorkedHours = model.WorkOnTicketCreateModel.WorkedHours;
                    workOnTicket.EstimateHours = model.WorkOnTicketCreateModel.EstimateHours;               
                ticketObj.WorkOnTickets.Add(workOnTicket);
                this.nhSession.Save(ticketObj);
                transaction.Commit();
            }
            return RedirectToAction("Details", new { id = model.Id, milestoneId = model.Milestone.Id, projectId = model.Project.Id });
        }

看法:-

@model AnkTech.TicketManagement.Web.Models.Ticket.TicketDetailModel
@using (Html.BeginForm("Details", "Ticket", FormMethod.Post, new { enctype = "multipart/form-data" }))
{   
@Html.ValidationSummary(true)
 @Html.TextBoxFor(model => model.WorkOnTicketCreateModel.EstimateHours, new { @id = "work_remaining", @class = "s-mini", size = "2" })
Worked hours:                                                                            @Html.TextBoxFor(model => model.WorkOnTicketCreateModel.WorkedHours, new { @id = "worked_hours", @class = "s-mini", size = "2" })
<input type="submit" value="Submit" tabindex="2" name="commit" id="submit-comment"
 class="gray-btn">
}

我已经删除了所有剩余的字段。我只添加了我要询问的相关字段,请帮忙。

4

1 回答 1

3

您需要使用ModelState.IsValid来检查模型是否实际有效。目前您分配验证属性但从不检查它们:

[HttpPost]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Details(TicketDetailModel model, IEnumerable file) {
    if (!ModelState.IsValid)
    {
        // Handle error
    }
    else
    {    
        using (ITransaction transaction = this.nhSession.BeginTransaction()) {
            var ticketObj = this.nhSession.QueryOver<Ticket>().Where(t => t.Id == model.Id).SingleOrDefault();
            var workOnTicket = new WorkOnTicket();
            workOnTicket.Ticket = ticketObj;
            workOnTicket.WorkedHours = model.WorkOnTicketCreateModel.WorkedHours;
            workOnTicket.EstimateHours = model.WorkOnTicketCreateModel.EstimateHours;               
            ticketObj.WorkOnTickets.Add(workOnTicket);
            this.nhSession.Save(ticketObj);
            transaction.Commit();
        }            
    }
    return RedirectToAction("Details", new { id = model.Id, milestoneId = model.Milestone.Id, projectId = model.Project.Id });
}
于 2013-04-18T10:06:48.020 回答