不是所有的字段被加载时保存在一个强类型的视图数据的最佳方式
-
18-09-2019 - |
题
让我们说我有一个强类型到一个名为“迈德特”表编辑视图。视图有多个选项卡,每个具有从表中几个不同的字段。出于性能,该选项卡观察时,数据仅加载,因此,如果仅在标签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编码
。不隶属于 StackOverflow