MVC将数据从视图传递到控制器

时间:2011-06-14 06:50:32

标签: asp.net-mvc visual-studio-2010

将数据从视图传递到控制器时,我没有什么问题。这是一个小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;
        }
}

现在我要做的是在用户按更新时传递哪些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>
   }
} 

2 个答案:

答案 0 :(得分:1)

不可能直接。要跟踪哪个字段已更新,您必须存储每个字段的哈希值,并在回发后,将哈希值与提交值的哈希值进行比较,就像WebForms在页面中存储ViewState一样。根据更新的字段,您可以在更新字段的基础上触发更新方法。

答案 1 :(得分:0)

为简单起见,您可以使用Html Input Disabled Attribute。禁用的字段不会发布到服务器,因此所有项目控制器都会被用户尝试更新。但是,要注意将此与敏感信息一起使用,因为Web服务器不应该信任用户提供的值 - 用户可以简单地启用所有字段并发布它们。如果您想知道用户尝试编辑哪些值并使用新值覆盖存储库不会导致问题,则此方法很有用。对于敏感信息,应在@Adeel建议的服务器端进行更改检查。 第一次使用disabled属性渲染所有输入,然后为每个可编辑字段提供附加按钮以启用它们。对于使用disabled属性进行渲染,请使用This Overload