代码之家  ›  专栏  ›  技术社区  ›  Łukasz W.

MVC如何填充Id参数?

  •  1
  • Łukasz W.  · 技术社区  · 15 年前

    今天我有一些有趣的观察,我需要解释一下。我有我的 Person 如上所述的类:

    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 视图我的表单只包含FirstName和LastName,但是当帖子在我的控制器中完成时,有什么让我惊讶的呢

    现在我猜它是从一个id参数的rout值中获取的,这个id参数被发送到我的操作地址中,但是它是save吗?我是说。。我不必为id设置隐藏字段,这很好,但是在mvc2中混合get和post参数是否有任何危险?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Darin Dimitrov    15 年前

    是的,它是从这条路走的。这很危险,因为如果重命名Person类的此属性,代码可能会中断。如果你改变路线,同样的情况也会发生。

    回答你的第二个问题。采用以下形式:

    <form action="/home/edit/5" method="post">
        <input type="text" name="Id" value="1" />
        <input type="submit" value="Go" />
    </form>
    

        2
  •  1
  •   Muhammad Adeel Zahid    15 年前

    当mvc默认模型绑定器绑定对象时,它会在许多地方查找它的值,而匹配的路由就是其中之一。如果你把你的属性名从id改为personID,它将不会从route值填充,你必须把隐藏字段放到你的表单中才能得到它。为了避免这种混淆,我总是将属性命名为不同于路由参数的属性。