C# 为什么LIST[index]=newObject会更改对象的索引?

C# 为什么LIST[index]=newObject会更改对象的索引?,c#,asp.net-mvc,C#,Asp.net Mvc,您好,我正在制作一个带有列表的MVC,而不是一个数据库,其中我使用的ID应该等于列表中的索引。每当我想编辑一个对象并用新对象替换旧对象时,索引总是在不断变化,我无法成功地替换该对象。我做错了什么?如何实现成功的编辑功能?在网页上,我只能成功编辑列表中第一个对象的0索引,并且所有编辑的对象都以某种方式获得0索引。在创建方法中,您将对象的BookingId设置为与列表索引相同。因此,当 boeking.BoekingId表达式在HttpPostEdit方法中返回0 int i = boekingen

您好,我正在制作一个带有列表的MVC,而不是一个数据库,其中我使用的ID应该等于列表中的索引。每当我想编辑一个对象并用新对象替换旧对象时,索引总是在不断变化,我无法成功地替换该对象。我做错了什么?如何实现成功的编辑功能?在网页上,我只能成功编辑列表中第一个对象的0索引,并且所有编辑的对象都以某种方式获得0索引。

在创建方法中,您将对象的
BookingId设置为与列表索引相同。因此,当
boeking.BoekingId
表达式在HttpPost
Edit
方法中返回
0

int i = boekingen2.FindIndex(x => x.BoekingId == boeking.BoekingId);
为什么返回
0
,它使用默认值
int
。这意味着您的编辑表单没有将此属性的值作为提交表单数据的一部分发送。要解决此问题,需要在请求正文中发送值。可以将此属性值保留在窗体内的隐藏元素中

您可以使用
Html.HiddenFor
helper方法生成隐藏的输入

@model HotelBoeking
@using (Html.BeginForm("Edit", "home"))
{
    @Html.HiddenFor(a=>a.BoekingId)

    @Html.LabelFor(a=>a.Naam)
    @Html.TextBoxFor(a=>a.Naam)

    @Html.LabelFor(a=>a.GeboorteJaar)
    @Html.TextBoxFor(a=>a.GeboorteJaar)

    @Html.LabelFor(a=>a.AantalPersonen)
    @Html.TextBoxFor(a=>a.AantalPersonen)

    <button type="submit">Save</button>
}
@model酒店预订
@使用(Html.BeginForm(“编辑”、“主页”))
{
@HiddenFor(a=>a.BoekingId)
@LabelFor(a=>a.Naam)
@Html.TextBoxFor(a=>a.Naam)
@LabelFor(a=>a.GeboorteJaar)
@Html.TextBoxFor(a=>a.GeboorteJaar)
@LabelFor(a=>a.AantalPersonen)
@Html.TextBoxFor(a=>a.AantalPersonen)
拯救
}

酒店预订是如何定义的?它是一个
还是一个
结构
?它是我的朋友在模型中的一个类。现在的情况是,每当我单击列表中不是0的对象时,我只能编辑第0个索引。我无法编辑它。我的身份系统出了什么问题我只是不知道发生了什么我假设你想让名单按身份排序?如果是这样,请删除现有条目,添加新条目,然后根据ID对列表进行排序。您也可以使用SortedDictionary。如何根据ID对其进行排序?您的意思是索引不断变化?您的编辑操作方法代码在我看来很好。什么具体不起作用?您期望的行为是什么?我刚刚进行了调试,HTML编辑表单正在发送正确的ID。最大的问题在于编辑后操作方法。如何替换该对象并保持相同的索引/ID?您当前的代码正在更新该项。我觉得很好。你面临的具体问题是什么?我面临的具体问题我只能编辑一次。之后,编辑帖子中的LINQ无法找到对象的索引。我做了一个调试,似乎列表计数是3,而列表中只有2个。列表计数正在增加,当我将此作为ID分配给boeking时,LINQ在第二次尝试后给了我-1 I变量。List.Remove(i)由于-1 iThat而给出错误,这意味着它找不到具有where条件的项。检查HttpPost编辑方法中的
boeking.BoekingId
值。对吗?同时检查
boekingen
列表中的数据,查看它是否已损坏先前尝试的
BookingId
值。我建议您删除静态列表中的所有内容,然后重试。