MVC 3 POST 数据和 Id 字段

NVM*_*NVM 2 razor asp.net-mvc-3

我的 MVC 3 项目中有一个模型的强类型剃刀视图。基本上它用于编辑模型。

该模型包含一个用于数据库键的 Id 字段和一些其他字符串字段(它是一个 viewModel 并且所有但那不是问题的重点)。

在视图中,我只有一个表单和一个提交按钮,没有别的。当视图被发布到控制器时,控制器中的模型的所有字段都是空的,除了 Id 字段,它似乎已经自动神奇地填充了。

在视图中没有对应的“输入”元素的情况下,Id 字段如何以及在何处填充到模型中。

这可能是一个愚蠢的问题,但即使只是一个指向我应该阅读的内容的链接,我也会很感激。谢谢。

Dar*_*rov 6

我敢打赌它来自 url 作为路由参数。

例如,您有以下控制器:

public class HomeController: Controller
{
    public ActionResult Index(int id)
    {
        vqr model = GetModel(id);
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        // the model.Id property will be automatically populated here
        // because the request was POST /home/index/123
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

以及以下观点:

@model MyViewModel
@using (Html.BeginForm())
{
    <button type="submit">OK</button>
}
Run Code Online (Sandbox Code Playgroud)

现在您导航到 GET/home/index/123并获得以下标记:

<form action="/home/index/123" method="post">
    <button type="submit">OK</button>
</form>
Run Code Online (Sandbox Code Playgroud)

注意到action表单的属性了吗?这就是 id 的来源。基本上,Html.BeginForm()助手在生成 action 属性时使用当前 url,并且由于当前 url 是/home/index/123它被使用的。

并且因为如果您在 Global.asax 中保留了默认路由,则{id}在 url 的末尾使用了路由标记,所以默认模型绑定器成功地将其绑定到Id您的视图模型的属性。