【问题标题】:MVC - setting up Create.cshtml with related dataMVC - 使用相关数据设置 Create.cshtml
【发布时间】:2021-09-05 10:09:25
【问题描述】:

我对 C#、MVC 和 EF 还很陌生,遇到了一个我似乎无法解决的问题。

我正在尝试更新 Create.cshtml 视图,以便它显示/列出 itemName 而不是 itemID,其中项目名称位于不同的表中。

到目前为止,这是我的部分代码:

型号:

using System;
using System.Collections.Generic;

namespace CIMSTest.Models
{
    public class DirectActivityItem
    {
        public int ID { get; set; }
        public int DirectTypeID { get; set; }
        public string ActivityName { get; set; }
        public DateTime DateActivityCreated { get; set; }
        public bool ActivityLive { get; set; }
        public ICollection<DirectActivityGroup> DirectActivityGroups { get; set; }
        public DirectType DirectType { get; set; }
    }
}
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;

namespace CIMSTest.Models
{
    public class DirectType
    {
        public int DirectTypeID { get; set; }
        public string DirectTypeName { get; set; }
        public bool DirectTypeLive { get; set; }
        public ICollection<DirectActivityItem> DirectActivityItems { get; set; }
    }
}

控制器(创建):

       public IActionResult Create()
        {
            ViewData["DirectTypeID"] = new SelectList(_context.DirectTypes, "DirectTypeID", "DirectTypeID");
            return View();
        }


        // POST: DirectActivityItems/Create
        // To protect from overposting attacks, enable the specific properties you want to bind to.
        // For more details, see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("ID,DirectTypeID,ActivityName,DateActivityCreated,ActivityLive")] DirectActivityItem directActivityItem)
        {
            if (ModelState.IsValid)
            {
                _context.Add(directActivityItem);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            ViewData["DirectTypeID"] = new SelectList(_context.DirectTypes, "DirectTypeID", "DirectTypeID", directActivityItem.DirectTypeID);
            return View(directActivityItem);
        }

创建.cshtml

@model CIMSTest.Models.DirectActivityItem

@{
    ViewData["Title"] = "Create";
}

<h1>Create</h1>

<h4>DirectActivityItem</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="DirectTypeID" class="control-label"></label>
                <select asp-for="DirectTypeID" class ="form-control" asp-items="ViewBag.DirectTypeID"></select>
            </div>
            <div class="form-group">
                <label asp-for="ActivityName" class="control-label"></label>
                <input asp-for="ActivityName" class="form-control" />
                <span asp-validation-for="ActivityName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="DateActivityCreated" class="control-label"></label>
                <input asp-for="DateActivityCreated" class="form-control" />
                <span asp-validation-for="DateActivityCreated" class="text-danger"></span>
            </div>
            <div class="form-group form-check">
                <label class="form-check-label">
                    <input class="form-check-input" asp-for="ActivityLive" /> @Html.DisplayNameFor(model => model.ActivityLive)
                </label>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-action="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

如您所见,Direct ActivityItem 表包含 DirectTypeID,但在“创建”页面上,我想列出 DirectType 表中的 DirectTypeNames 而不是 ID,因为用户不知道 ID 是什么。

如果有人能提供任何信息,将不胜感激。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework


    【解决方案1】:

    改变这个:

    ViewData["DirectTypeID"] = new SelectList(_context.DirectTypes, "DirectTypeID", "DirectTypeID"); 
    

    到这里:

    ViewData["DirectTypeID"] = new SelectList(_context.DirectTypes, "DirectTypeID", "DirectTypeName");
    

    您会希望您的视图模型返回 DirectTypeID,因为这将是您解决关系的最佳方式,但第三个参数告诉 SelectList 为每个选择显示什么。

    【讨论】:

      猜你喜欢
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      相关资源
      最近更新 更多