MVC 3 POST数据和Id字段

时间:2012-03-05 12:06:34

标签: asp.net-mvc-3 razor

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

该模型包含数据库键和其他一些字符串字段的Id字段(它是一个viewModel,但不是问题的所有部分)。

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

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

这可能是一个愚蠢的问题,但我很感激,甚至只是我应该阅读的链接。感谢。

3 个答案:

答案 0 :(得分:4)

我敢打赌它来自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
        ...
    }
}

和以下观点:

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

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

<form action="/home/index/123" method="post">
    <button type="submit">OK</button>
</form>

请注意表单的action属性? id来自哪里。基本上Html.BeginForm()助手在生成action属性时使用当前url,并且由于当前url为/home/index/123,因此使用它。

因为如果您在Global.asax中保留了默认路由,则在URL的末尾使用{id}路由令牌,默认模型绑定器会成功将其绑定到Id属性您的视图模型。

答案 1 :(得分:1)

您可能正在点击类似于以下内容的URL:/ MyObject / Edit / 15

然后返回您有空白表单的页面。

接下来会发生一个HTML.BeginForm(),它发布回到/ MyObject / Edit / 15

现在由于邮寄回来的格式相同,您的路由规则会获取'15'并将其绑定回您的ID。

答案 2 :(得分:0)

您是否已将ID字段添加为隐藏字段?

e.g。 @ Html.HiddenFor(x =&gt; x.ID)