【问题标题】:.net core modelstate invalid using selectlist with guid.net core modelstate 使用带有 guid 的选择列表无效
【发布时间】:2020-04-18 16:01:40
【问题描述】:

所以我正在我的 webapp 中创建我的第三个 crud 服务。 webapp 正在运行.net core 3.0。我以前的 2 个项目和员工应用程序。所以用户/员工在项目上做一些工作。

所以对于我的创建视图中的“工作”crud 服务/应用程序,我需要有一个所有项目的下拉列表和一个所有员工的下拉列表和一个视图输入。对于员工和项目,id 是一个 guid,因为它是独一无二的。但我似乎有一个问题,我的模型状态总是无效的。

ps:也是我的数据模型,可以说它不会生成任何外键,例如带有工作 ID 或员工 ID 的项目 ID。”

工作模型:

public class Work
    {

        public int Id { get; set; }

        [Required]
        [StringLength(512, ErrorMessage = "Description cannot exceed 512 characters!")]
        public string Description { get; set; }        

        [Required]
        [Display(Name = "Working hours")]
        public double WorkingHours { get; set; }

        [Required]
        [Display(Name = "Employee")]
        public Guid EmployeeId { get; set; }

        public Employee Employee { get; set; }

        [Required]
        [Display(Name = "Project")]
        public Guid ProjectId { get; set; }

        public Projects Project { get; set; }

        [Required]
        public DateTime dateAdded { get; set; }


    }

视图模型:

public class WorkViewModel
    {
        public IEnumerable<Projects> projects { get; set; }
        public IEnumerable<Employee> employees { get; set; }
        public Guid employeeId { get; set; }
        public Guid projectId { get; set; }
        public Work work { get; set; }
    }

创建视图:

@model TimeSheetTool.ViewModels.WorkViewModel
@{
    ViewData["Title"] = "Create";
}

<h1>Create</h1>

<div class="row">
    <div class="col-sm-4">
        <form asp-action="Save">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <select asp-for="projectId" asp-items="@(new SelectList(Model.projects, "Id", "Name"))">
                    <option>Please select one!</option>
                </select>
                <span asp-validation-for="projectId" class="text-danger"></span>
            </div>

            <div class="form-group">
                <label asp-for="work.Description" class="control-labels"></label>
                <input asp-for="work.Description" class="form-control" />
                <span asp-validation-for="work.Description" class="text-danger"></span>
            </div>

            <div class="form-group">
                <label asp-for="work.WorkingHours" class="control-labels"></label>
                <input asp-for="work.WorkingHours" class="form-control" />
                <span asp-validation-for="work.WorkingHours"></span>
            </div>
            <div class="form-group">
                <select asp-for="employeeId" asp-items="@(new SelectList(Model.employees, "Id", "Name"))">
                    <option>Please select one!</option>
                </select>
                <span asp-validation-for="employeeId" class="text-danger"></span>
            </div>

            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-outline-primary" />
            </div>
        </form>
    </div>
</div>
<div>
    <a asp-action="Index">Back to List</a>
</div>

我做错了什么?正如您在选择列表的创建视图中看到的那样,我得到了 ID,我认为它实际上需要 guid,因为我使用的是 guid,但是应用程序根本无法运行。

【问题讨论】:

  • 这是因为视图模型中的Work 属性。它具有验证,如果不满足将导致问题
  • @nkosi yup thx,我所做的是视图模型实现了项目员工和工作,但我的工作模型也实现了项目和员工,这有点重复,所以我从我的视图模型中删除了工作并添加了roperties 并且有效

标签: asp.net-core c#-8.0 .net-3.0


【解决方案1】:

这是因为视图模型中的 Work 属性。

public Work work { get; set; }

它有验证,如果不满足会导致无效模型状态问题

为视图模型添加必要的属性

public class WorkViewModel {
    public IEnumerable<Projects> projects { get; set; }
    public IEnumerable<Employee> employees { get; set; }
    public Guid employeeId { get; set; }
    public Guid projectId { get; set; }
    [StringLength(512, ErrorMessage = "Description cannot exceed 512 characters!")]
    public string Description { get; set; }        
    [Display(Name = "Working hours")]
    public double WorkingHours { get; set; }
}

并在调用绑定视图的操作时根据需要填充它们

<div class="form-group">
    <label asp-for="Description" class="control-labels"></label>
    <input asp-for="Description" class="form-control" />
    <span asp-validation-for="Description" class="text-danger"></span>
</div>

<div class="form-group">
    <label asp-for="WorkingHours" class="control-labels"></label>
    <input asp-for="WorkingHours" class="form-control" />
    <span asp-validation-for="WorkingHours"></span>
</div>

这些值可以在发布时复制到模型中

【讨论】:

  • jup thx 我昨天自己想通了,因为在我的工作模型中,employeeid 和 projectid 具有必需的属性。但感谢您的回复
猜你喜欢
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
相关资源
最近更新 更多