Asp.net core 在一个页面上创建/更新一对多关系模型

Asp.net core 在一个页面上创建/更新一对多关系模型,asp.net-core,.net-core,core,Asp.net Core,.net Core,Core,在网上找不到不涉及在单独页面上为每个模型创建或更新行的示例。我有一个简单的访问表单,其中整个访问是一个模型,包含主机信息和其他通用参数。第二个模型是访问者,其中一次访问可以有很多。关系很好,我可以单独更新 我已经建立了一个请求表单,我想在一个页面上完成所有操作。表单的上半部分是关于访问的一般信息,下半部分是javascript动态表单部分,用于动态添加/删除访问者。表单很好,输入访问信息很好,但我不能从输入的信息中获取列表。他们的名字遵循“访问者[1].Name”等格式 我已经尝试将列表访问者作

在网上找不到不涉及在单独页面上为每个模型创建或更新行的示例。我有一个简单的访问表单,其中整个访问是一个模型,包含主机信息和其他通用参数。第二个模型是访问者,其中一次访问可以有很多。关系很好,我可以单独更新

我已经建立了一个请求表单,我想在一个页面上完成所有操作。表单的上半部分是关于访问的一般信息,下半部分是javascript动态表单部分,用于动态添加/删除访问者。表单很好,输入访问信息很好,但我不能从输入的信息中获取列表。他们的名字遵循“访问者[1].Name”等格式


我已经尝试将列表访问者作为变量添加到访问模型中,我还尝试了一个组合的自定义模型,包含访问和访问者。有人有什么建议吗?

根据您的描述,我想这个问题可能与输入的名称值有关。因为模型绑定将根据参数的名称绑定值。我建议您可以检查输入名称,以确保它与模型绑定格式匹配

例如:

如果您的访问和访客类别如下: 公开课堂参观 { 公共int id{get;set;} 公共字符串visitname{get;set;} 公共列表访问者{get;set;} } 公务舱访客 { 公共int id{get;set;} 公共字符串访问者{get;set;} }

然后访问者的输入名称应为
访问者[0]。id
访问者[1]。id
访问者[2]。id
访问者[0]。访问者
访问者[1]。访问者
或其他

更多详细信息,请参考以下代码:

控制器:

public class HomeController : Controller
    {
        Visit visits;//It is a global variable
        public HomeController()
        {
            visits = new Visit
            {
                id = 10,
                visitname = "visit1",
                visitors = new List<Visitors>
                {
                    new Visitors{ id=19, visitor="visitor1"},
                    new Visitors{ id=20, visitor="visitor2"}
                }
            };
        }

        public IActionResult Index()
        {
            return View(visits);
        }
}
公共类HomeController:控制器
{
Visit visits;//它是一个全局变量
公共家庭控制器()
{
访问量=新访问量
{
id=10,
visitname=“visit1”,
访客=新名单
{
新访客{id=19,visitor=“visitor1”},
新访客{id=20,visitor=“visitor2”}
}
};
}
公共IActionResult索引()
{
回访(参观);
}
}
在Index.cshtml中,JavaScript对视图所做的更改可能会影响Visitors.Name中下标的更改。因此,在添加元素和删除相应元素时,应该更改索引值

    @model solution930.Models.Visit
@{
   //Set a global variable
    var count = Model.visitors.Count;
}
    <form action="/home/get" method="post">
        id
        <input asp-for="@Model.id" />
        visitname
        <input asp-for="@Model.visitname" />
        <div id="visitors">
            @for (var i = 0; i <count; i++)
            {
                <div class="visitor">
                    <input name="visitors[@i].id" asp-for="@Model.visitors[i].id" />
                    <input name="visitors[@i].visitor" asp-for="@Model.visitors[i].visitor" />
                    <input type="button" name="name" value="deleterow" onclick="del(event,@Model.visitors[i].id)" />
                </div>
            }
        </div>
        <input type="submit" name="name" value="sub" />
    </form>
<button id="addvisit" onclick="add()">add</button>
@section Scripts{
    <script>
        var hasCount=@count;
        function del(e, id) {
            if (index == 0) {
                console.log(e.currentTarget.parentElement)
                e.currentTarget.parentElement.remove()
                return;
            }
            location.href = '/home/delete?id=' + id
       }

        function add() {
            var ele = '<div class="visitor"> <input name="visitors[' + hasCount + '].id" type="number" data-val="true" data-val-required="The id field is required." id="visitors_' + hasCount + '__id" value="">  <input name = "visitors[' + hasCount + '].visitor" type = "text" id = "visitors_' + hasCount + '__visitor" value = "" >  <input type="button" name="name" value="deleterow" onclick="del(event,0)"> </div>'
            $('#visitors').last().parent().append(ele)
            hasCount++
            console.log(hasCount)
        }
    </script>
}
@model solution930.Models.Visit
@{
//设置一个全局变量
var count=Model.visitors.count;
}
身份证件
访问名

@为了(var i=0;我展示您的代码将帮助我们解决您的问题。感谢您提供的详细答案。因此,我几乎不折不扣地这样做,只使用基本javascript而不是JQuery,我几乎认为这是问题所在。问题是,在为我的访问者模型生成动态行时,我将索引从1开始,而不是从1开始0,因此第一个将显示为访问者[1]。名称…等。将其更改为索引0,以显示访问者[0]。名称等,在发布后将其正确绑定并遍历所有条目。感谢您的帮助!