我在我的MVC 3项目中有一个模型的强类型剃刀视图。基本上它用于编辑模型。MVC 3 POST数据和Id字段
模型包含数据库键和一些其他字符串字段(它是一个viewModel和所有的但不是问题的重点)的Id字段。
在视图中我只是有一个表单和提交按钮,没有别的。当视图发布到控制器时,控制器中的模型除了Id字段外,其他所有字段都是空的,这似乎是自动填充的。
Id字段如何在模型中填充,而在视图中没有相应的“输入”元素。
这可能是一个愚蠢的问题,但即使只是一个链接,我应该阅读。谢谢。
我在我的MVC 3项目中有一个模型的强类型剃刀视图。基本上它用于编辑模型。MVC 3 POST数据和Id字段
模型包含数据库键和一些其他字符串字段(它是一个viewModel和所有的但不是问题的重点)的Id字段。
在视图中我只是有一个表单和提交按钮,没有别的。当视图发布到控制器时,控制器中的模型除了Id字段外,其他所有字段都是空的,这似乎是自动填充的。
Id字段如何在模型中填充,而在视图中没有相应的“输入”元素。
这可能是一个愚蠢的问题,但即使只是一个链接,我应该阅读。谢谢。
我敢打赌,它来自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()
帮助程序在生成操作属性时使用当前网址,并且由于当前网址为/home/index/123
,因此它被使用了。
而且,如果您在Global.asax中保留了默认路由,则在url的末尾会使用{id}
路由令牌,默认模型绑定程序会成功将其绑定到您的视图模型的Id
属性。
你可能打类似如下的URL:/为MyObject /编辑/ 15
这然后返回,你有你的空白表单的页面。
接下来发生的事情是你有一个HTML.BeginForm(),这是BACK张贴到/ MyObject来/编辑/ 15
现在,因为该职位的背面具有相同格式的路由规则捡'15 '并将其绑定回您的ID。
您是否将ID字段添加为隐藏字段?
例如 @ Html.HiddenFor(x => x.ID)
非常感谢。我猜想它来自路线参数,但不知道如何。 – NVM 2012-03-05 12:30:57