模型绑定器困境

时间:2011-10-04 06:23:18

标签: c# asp.net-mvc-3 razor modelbinders

为什么我总是对模型活页夹有这么多麻烦?我有以下控制器:

namespace X.Web.Controllers
{
    public class ExpertsVM
    {
        public string GivenName;
        public string Surname;
    }

    public class AuthController : Controller
    {
        [HttpPost]
        public ActionResult RegisterExpert(ExpertsVM v)
        {

我的观点如下:

@using X.Web.Controllers
@model ExpertsVM

@using (Html.BeginForm("RegisterExpert", "Auth"))
{
    @Html.EditorFor(x => x.GivenName)
    @Html.EditorFor(x => x.Surname)

所以表单会像这样呈现:

<form action="/Auth/RegisterExpert" method="post">
<input class="text-box single-line" id="GivenName" name="GivenName" type="text" value="" />
<input class="text-box single-line" id="Surname" name="Surname" type="text" value="" />

但是当调用该操作时,v包含所有空值。如果我宣布这样的行动:

[HttpPost]
public ActionResult RegisterExpert(FormCollection f)
{

我看到了所有的价值......所以我在这里做错了什么?

2 个答案:

答案 0 :(得分:6)

我不是100%肯定,但我会使用属性而不是公共领域。

public class ExpertsVM
{
    public string GivenName {get;set;}
    public string Surname {get;set;}
}

答案 1 :(得分:2)

模型绑定器在模型上查找公共属性。 VdesmedT的答案是正确的,但我补充说这是为了强调重点(他不是100%肯定,我是)。

您还可以通过以下方式为自己节省一份使用声明:

@model X.Web.Controllers.ExpertsVM

我赞成了VdesmedT的回答者。你应该将其标记为答案。