如何解决MVC将数据从视图传递到cotroller
我在这里将数据从视图传递到控制器几乎没有问题。这是一个CRUD站点,这里有一些代码来解释我的问题。Model:
public class TempModel{
public List<Temp> Temp1 { get; set; }
}
View:
@{ using (Html.BeginForm()) {
for (int i = 0; i < TempModel.Temp1.Count; i++)
{
@Html.LabelFor(model => model.Temp[i].ModifiedBy,\"Modified By: \")
@Html.TextBoxFor(model => model.Temp[i].ModifiedBy)
<button name=\"button\" value=\"update\">Update</button>
}
}
Controller:
[HttpPost]
public ActionResult Index(TempModel.Temp1,string button){
switch (button)
{
case \"delete\":
break;
case \"update\":
UpdateSingleTemp(TempModel.Temp1);
break;
}
}
现在,我要做的是传递用户按下update时更改了那些Temp1 [i]对象之一。
必须有一种简单的方法来告诉控制器ItemId或dataIsChanged或类似的东西,但我现在无法弄清楚。我对MVC很陌生。
编辑:
我设法解决了这个问题。最简单的方法就是使用多种形式并从模型中删除List。
@for (int i = 0; i < TempModel.Count; i++)
@{ using (Html.BeginForm()) {
{
@Html.LabelFor(model => model[i].ModifiedBy,\"Modified By: \")
@Html.TextBoxFor(model => model[i].ModifiedBy)
<button name=\"button\" value=\"update\">Update</button>
}
}
解决方法
无法直接进行。若要跟踪哪个字段已更新,您必须存储每个字段的哈希,然后回发,将哈希与提交值的哈希进行比较,就像WebForms在页面中存储ViewState一样。根据更新的字段,您可以基于更新的字段触发更新方法。
, 为简单起见,您可以使用“ HTML输入禁用”属性。禁用的字段不会发布到服务器,因此控制器尝试获取所有项目,用户尝试对其进行更新。但是,请注意不要将其与敏感信息一起使用,因为Web服务器不应信任用户提供的值-用户可以简单地启用所有字段并将其发布。如果您想知道用户尝试编辑的值,并用新值覆盖存储库不会引起问题,此方法很有用。对于敏感信息,应按照@Adeel的建议在服务器端进行更改检查。
首次渲染所有具有禁用属性的输入,然后为每个可编辑字段提供附加按钮以启用它们。对于具有禁用属性的渲染,请使用“此重载”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。