- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
通俗地说,UpdateModel()
和TryUpdateModel()
是做什么的?我似乎无法(在 SO 或网络上)找到任何关于它实际做什么的明确解释(用明确的术语),只是人们在使用它时遇到问题。
VisualStudio 的智能感知也没有帮助我。我问的原因是,比方说,如果我的 Controller 中有这个:
[HttpPost]
public ActionResult Index( UserViewModel vm, FormCollection form)
{
var statesCheckBoxes = form["StatesList"];
vm.BA.StatesTraveledTo = statesCheckBoxes.Split(',').ToList<string>();
return View(vm);
}
我不是已经通过设置 vm.BA.StatesTraveledTo
更新了我的模型吗?为什么我需要运行 UpdateModel?此外,当我实际尝试执行以下操作时:
[HttpPost]
public ActionResult Index( UserViewModel vm, FormCollection form)
{
var statesCheckBoxes = form["StatesList"];
vm.BA.StatesTraveledTo = statesCheckBoxes.Split(',').ToList<string>();
UpdateModel(vm); // IS THIS REDUNDANT TO THE PREVIOUS LINE?
return View(vm);
}
当我检查 ModelState 的值时(在我运行 UpdateModel() 之后),似乎没有任何事情发生,我没有看到任何表明有任何变化的迹象。我在 ModelState 字典中没有看到新键。
真的很迷茫。谢谢!
编辑:
发布 ViewModel 和 Model 类的源代码:
public class UserViewModel
{
public BankAccount BA { get; set; }
}
public class BankAccount
{
public Person User { get; set; }
public List<string> StatesTraveledTo { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
最佳答案
当你写的时候会发生什么
public ActionResult Index( UserViewModel vm)
{ }
当您检查 ActionResult
时,您会发现 vm
包含您从 View 发布的值。这是因为 mvc 指示模型绑定(bind)器从不同来源(表单集合、路由值、查询字符串等)提取值并填充模型的值。但是要做到这一点,您的表单键必须与模型中的属性名称匹配,如果是这种情况,您的模型就会正确填充。现在我们来谈谈真正的问题:UpdateModel 做了什么?简单的答案就是模型绑定(bind)。不同之处仅在于您明确地调用了它。上面的ActionResult
可以像使用UpdateModel一样改写
Public ActionResult Index ()
{
UserViewModel vm = new UserViewModel();
UpdateModel(vm);// it will do same thing that was previously handled automatically by mvc
}
现在,自动模型绑定(bind)未处理的内容也不会由显式模型绑定(bind)处理,因为这不是模型绑定(bind)器的问题,而是您的 html 的问题。对于像您这样的嵌套 View 模型,必须精心设计表单字段名称,以便 mvc 可以将它正确地注入(inject)到您的模型中,而无需编写类似
vm.BA.StatesTraveledTo = statesCheckBoxes.Split(',').ToList<string>();
如果你不想做这样的事情,请检查这个 google search
关于c# - UpdateModel() 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8600239/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!