C# 在.NET Core中插入组合框内部视图

C# 在.NET Core中插入组合框内部视图,c#,entity-framework,asp.net-core-mvc,C#,Entity Framework,Asp.net Core Mvc,我有一个视图页面来插入一些数据 模型如下: @model BookListMVC.Models.Book 我需要插入一个链接到另一个表“Categories”的组合框 编译器不允许我插入多个模型,因为这可能不是正确的方法 如何插入链接到“类别”的组合框,指向book“IdCategory” 下面是完整的实际代码: @model BookListMVC.Models.Book <br /> <h2 class="text-info">@(Model.

我有一个视图页面来插入一些数据

模型如下:

@model BookListMVC.Models.Book
我需要插入一个链接到另一个表“Categories”的组合框

编译器不允许我插入多个模型,因为这可能不是正确的方法

如何插入链接到“类别”的组合框,指向book“IdCategory”

下面是完整的实际代码:

@model BookListMVC.Models.Book

<br />
<h2 class="text-info">@(Model.Id!=0 ? "Edit" : "Create") Book</h2>
<br />

<div class="border container" style="padding:30px;">
    <form method="post">
        @if (Model.Id != 0)
        {
    <input type="hidden" asp-for="Id" />}
        <div class="text-danger" asp-validation-summary="ModelOnly"></div>
        <div class="form-group row">
            <div class="col-3">
                <label asp-for="Name"></label>
            </div>
            <div class="col-6">
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group row">
            <div class="col-3">
                <label asp-for="Author"></label>
            </div>
            <div class="col-6">
                <input asp-for="Author" class="form-control" />
                <span asp-validation-for="Author" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group row">
            <div class="col-3">
                <label asp-for="ISBN"></label>
            </div>
            <div class="col-6">
                <input asp-for="ISBN" class="form-control" />
                <span asp-validation-for="ISBN" class="text-danger"></span>
            </div>
        </div>


        <div class="form-group row">
            <div class="col-3">
                <label asp-for="ISBN"></label>
            </div>
            <div class="col-6">
                <input asp-for="ISBN" class="form-control" />
                <span asp-validation-for="ISBN" class="text-danger"></span>
            </div>
        </div>



        <div class="form-group row">
            <div class="col-3 offset-3">
                <button type="submit" class="btn btn-primary form-control">
                    @(Model.Id != 0 ? "Update" : "Create")
                </button>
            </div>
            <div class="col-3">
                <a asp-action="Index" class="btn btn-success form-control">Back to List</a>
            </div>
        </div>
    </form>
</div>
@model BookListMVC.Models.Book

@(Model.Id!=0?“编辑”:“创建”)书本
@如果(Model.Id!=0) { } @(Model.Id!=0?“更新”:“创建”) 返回列表
您可以通过ViewBagViewData插入组合框模型。比如说

public IActionResult Index()
    {

        //The data can be obtained from database.
        ViewBag.Categories = new List<SelectListItem>
        {
            new SelectListItem{ Text="history", Value="1"},
            new SelectListItem{ Text="literature", Value="2"},
        };

        var model = new Book { Id = 2, Author="author", ISBN="isbn", Name="bookname" };
        return View(model);
    }
结果 您可以在model
Book
中添加属性
CategoryId
,甚至可以添加属性
Categories

 public class Book
{
    
    public int CategoryId { get; set; }
    
    public Categories categories { get; set; }
}
如果要将对象
类别
传递到bakend,可以添加隐藏的输入框和相关javascript

@section Scripts{ 
<script>
function changeName() {
    var index = document.getElementById("categories").selectedIndex;
    var text = document.getElementById("categories").options[index].text;
    document.getElementById("categoryName").value=text
}
</script>
}
添加隐藏框

      <div class="form-group row">
        <div class="col-3">
            <label asp-for="categories"></label>
        </div>
        <div class="col-6">
            <select onchange="changeName()" asp-for="categories" name="categories.CategoryId" asp-items="ViewBag.Categories">
                <option>-- select the category --</option>
            </select>
            <input type="hidden" name="categories.CategoryName" value="" id="categoryName"/>
            <span asp-validation-for="categories" class="text-danger"></span>
        </div>
    </div>

--选择类别--
添加javascript

@section Scripts{ 
<script>
function changeName() {
    var index = document.getElementById("categories").selectedIndex;
    var text = document.getElementById("categories").options[index].text;
    document.getElementById("categoryName").value=text
}
</script>
}
@节脚本{
函数changeName(){
var index=document.getElementById(“类别”)。selectedIndex;
var text=document.getElementById(“类别”).options[index].text;
document.getElementById(“categoryName”).value=text
}
}

然后您可以获得所有数据,包括类别和can处理类别表。

谢谢!!如果我有“@model BookListMVC.Models.Book”如何访问表“类别”?C#不允许我在“某些”视图中访问多个“@model”。在当前视图中,您希望在何处访问表
类别
?如果你想访问多个
“@model
,你需要在每个pameter上添加一些索引,关于这个问题,你可以重新打开一个问题。对不起,我是MVC新手,如果我的模型是“@model BookListMVC.Models.Book”如何访问“Categories”?不清楚什么是“ViewBag.Categories”。我想如果我的模型是@model BookListMVC.Models.Book“我只能访问Book而不能访问其他表。您能更新您的响应吗?每个
Book
都有一个外键,您可以将外键传递给bakend,然后您可以根据外键(CategoryId)处理类别。
@section Scripts{ 
<script>
function changeName() {
    var index = document.getElementById("categories").selectedIndex;
    var text = document.getElementById("categories").options[index].text;
    document.getElementById("categoryName").value=text
}
</script>
}