今天我有一些有趣的观察,我需要解释。我有一个被描述为我上面的Person
类:MVC如何填充Id参数?
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
现在在我的MVC2应用我有PersonController具有以下编辑梅托德:
public ActionResult Edit(int id)
{
var permission = _service.GetPerson(id);
return View(person);
}
[HttpPost]
public ActionResult Edit(Person person)
{
if (ModelState.IsValid)
{
_service.UpdatePerson(permission);
return RedirectToAction("Index");
}
return View(person);
}
现在我Edit.aspx
观点我有形式只包含名字和姓氏,但是当我的控制器中的帖子完成时,令我感到惊讶的是,Person
对象的Id设置正确(它不是表单的一部分)。
现在我猜它是从id参数的路由值中获取的,这是发送到我的操作地址中的,但它是否保存?我的意思是,我不需要为id设置隐藏字段,但是在mvc2中混合get和post参数会导致任何危险吗?
还有一个问题。如果我确实隐藏了id,该怎么办?然后它会被发送(get和post),所以然后..将使用哪个id?
好吧..那么我在我的问题的底部描述(编辑后)的情况是什么? – 2010-09-25 10:12:30
@Darin是真的吗?那么,第一个是来自课程路线,但第二个应该来自隐藏领域,因为他使用的视图是Person的强类型(我猜是这样)。发布到编辑时,路由中没有Id,只有在发布后的值 – 2010-09-25 10:14:13
否,不会从路由中获取。 Person对象在第一个Controller中生成,然后显示。同一个Person对象被发送到第二个控制器并在数据库中更新。在GET中重命名参数只会在第一个方法中产生效果。 – Femaref 2010-09-25 10:14:16