让我们说我有一个强类型到一个名为“迈德特”表编辑视图。视图有多个选项卡,每个具有从表中几个不同的字段。出于性能,该选项卡观察时,数据仅加载,因此,如果仅在标签1编辑字段和提交表单,用于标签2中的数据将不会被加载。

我遇到的问题是在提交。我做的查找数据库中的现有记录和更新传递的值的典型程序:

<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal data As MyData) As ActionResult

    Using dc = New MyDataContext
        Dim orig = dc.MyDatas.Single(Function(x) x.id = data.id)
        orig.name = data.name
        orig.desc = data.desc
        ...
        SubmitChanges()
    End Using

    Return View(orig)

End Function

然而,该方法不知道哪个加载翼片,因此,如果没有装载与它“DESC”的标签,这种方法认为用户消隐出了“desc”的字段中,并且发送NULL到数据库。

如何构建这样使得只有加载字段被发送到数据库,和卸载域被忽略?

有帮助吗?

解决方案

是否有你不使用UpdateModel(orig)任何理由?

如果你使用模型结合,而不是通过手动形式内容会和分配的值,这将被采取为你照顾。默认模型结合行为是忽略不具有对应的形式的值的属性。

您可能想看看这帖子,并在那里链接的文章,以了解更多有关模型绑定。

其他提示

我建议具有用于每个刚刚更新标签上的字段选项卡的独立操作方法。然后每个选项卡上的形式将只提交给适当的行动。

也许一个ViewModel模式可以帮助你在这里,你属于你喜欢的选项卡原始模型的意见是这样的:

public class Tab1 
    {
        public string pproperty1 { get; set; }
        public string pproperty2 { get; set; }
    }
    public class Tab2
    {
        public string pproperty3 { get; set; }
        public string pproperty4 { get; set; }
    }
    public class Tab3
    {
        public string pproperty5 { get; set; }
        public string pproperty6 { get; set; }
    }
    public class ViewModels
    {
        public Tab1 TAB1 { get; set; }
        public Tab2 TAB2 { get; set; }
        public Tab3 TAB3 { get; set; }
    }

所以,当你如果Tab2 == null那么你知道这个特性并没有被用户加载既不改变绑定发布的值。

PD:对不起,C#,它被一个时间看到我VB编码

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top